私は次のコードを持っています:
$.ajax({
async: false,
url: 'chart_data.php',
data: {'option':'high', 'id':id},
dataType: 'json',
success: function(response){
alert('in');
var data = google.visualization.arrayToDataTable(response);
var options= { curveType:'none', width: 300, height: 200, hAxis: {title:'Years'}, vAxis: {title:'Value'}, title: 'High Time - Low Value' };
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
});
ウェブページで。ドロップダウンメニューに基づいてチャートを表示したいのですが。関数の残りの部分は問題なく機能します。Firebugをチェックインすると、JSON応答に200OKステータスメッセージが表示されます。実際、FirebugではすべてのJSONを問題なく見ることができます。
問題は残っています、なぜalert('in');
トリガーされないのですか、そしてなぜグーグルはそれのチャートを関連するチャートdivにロードしないのですか?
編集:
エラーコールバックを追加すると、次のエラーが発生します。parseerror SyntaxError:JSON.parse:予期しない文字。
これはサーバーからのJSON応答です。
[['Year', 'Low', 'High'],['1984', 318000, 395000],['1984', 418000, 495000],
['1984', 380000, 450000],['1984', 410000, 460000],['1984', 410000, 460000],
['1985', 435000, 485000],['1985', 435000, 485000],['1985', 435000, 485000],
['1985', 435000, 485000],['1985', 435000, 485000],['1985', 435000, 485000],
['1985', 435000, 485000],['1985', 435000, 485000],['1985', 318000, 395000],
['1985', 418000, 495000],['1985', 380000, 450000],['1985', 420000, 470000],
['1985', 420000, 470000]]
JSON構造については100%確実ではありませんが、私には正しいように見えます。
編集:
いくつか変更を加えましたが、もう少し進んでいるようです。まず、header('Content-type: application/json');
phpスクリプトからその行を削除しました。次に、をに変更しdataType: 'json'
ましたdataType: 'html'
。
$ .ajax()呼び出しで成功コールバックをロードするようになりました。GoogleのarrayToDataTable()メソッドに送信しようとしたときのテキスト応答が気に入らない。
返された文字列(実際にはJSON応答ではない上記のJSON応答のように見えます)をJavaScript配列に解析することができれば、私は黄金になります。私は願います。
編集:
成功コールバックでevalステートメントを使用して、http応答を配列に変換することになりましたeval('var res = ' + response);
。これはおそらくこれを行うための最良の方法ではありません。誰かがこれを行うためのより良い(そしてより安全な)方法を持っているなら、それは素晴らしいことです。
編集:
evalステートメントを使用するのはあまり好きではなかったので、戻り文字列を配列に変更する他の方法を調べました。この小さな宝石に出くわすまで、私はそれらのどれも本当に気にしませんでした:
response = JSON.parse(response);
これは問題なく機能します。
皆様のご協力に感謝いたします。