1

Googleチャートでチャートを描画する関数の引数としてajaxレスポンスを使用しようとしています。

これはJSコードです:

data.addRows([['One', 5], ['Two', 2]]);

ご覧のとおり、引数には、「チャートの単位」の名前とその値を含む 2 つの角かっこが含まれています。すべてが機能します。ただし、ajax responseText を引数として渡すと、まったく機能しません。

data.addRows(xmlhttp.responseText);

PHP コードは json_encode($value) を返します。ここで、$value 変数は次の文字列です: [[one, 5], [two, 2]]

だから私が得る結果として:

"[['one', 5], ['two', 2]]"

ところで。また、JS コードの文字列から二重引用符を削除しようとしましたが、結果はまだありません。

どうしたの?firebug は私にいくつかの奇妙なエラーを与えます: addRows に与えられた引数は、数値または配列でなければなりません...

これを修正するにはどうすればよいですか?

4

2 に答える 2

3

data.addRowsは実際の JavaScript 配列を期待しており、文字列を渡しています。文字列を配列に変換するには、JSON パーサーを使用する必要があります。ただし、サーバーから取得する応答は、一重引用符が原因で有効な JSON ではありません。

手順:

  1. サーバーを更新して、正しい MIME タイプ の送信を含む有効な JSON 応答を送信しますapplication/json。JSON 解析を実行できる jQuery などの ajax ライブラリを使用する場合は、標準に従うことが役立ちます。

  2. responseTextのようなものを使用して自分自身を解析するJSON.parse(...)か、jQuery のような ajax ライブラリを使用してそれを行います。responseTextいずれにせよ、文字列を実際の JavaScript 配列に変換する必要があります。

于 2012-10-20T16:06:40.440 に答える
1

あなたはできるはずですdata.addRows(JSON.parse(xmlhttp.responseText));。ただし、一重引用符を使用すると問題が発生するため、キーに二重引用符を使用するようにPHPに指示する必要があります。

; `のようなこともできdata.addRows(JSON.parse(xmlhttp.responseText.replace(/'/, "\"")))ますが、PHPが正しい引用符を使用していることを確認する方がはるかに良いでしょう。

于 2012-10-20T15:52:55.123 に答える