1

PHPでは、次のような配列があります:

$arr['a'] = "some big data so may contain some chars that bring us headache"
$arr['b'] = "some big data same as above"

$data = json_encode($arr)
echo $data

jquery ajax 呼び出し $.ajax を含む私の JavaScript コード。上記のphpコードを含むファイルを呼び出すため、成功すると、json_encoded(phpによる)がjavascript変数に返されます。私のjavascriptファイルでは、次のようにしています:

jsdata = JSON.parse(data); //Getting error here

$.ajax({
type: "post",
data: jsdata,
url: "url",
crossDomain: true,
dataType: 'jsonp'
}).done(function(d) {
  print("success");
});

上記のコードの jsdata = JSON.parse(data) 行で、次のようなエラーが発生しています

  Error :    UNEXPECTED TOKEN <

データにはさまざまなコンテンツが含まれているため、これらのエラーが発生するのは正常です。適切にエスケープする必要があります。誰でもそれを正しく行う方法を教えてもらえますか。データが何であれ、データに関するエラーは発生しません。

ありがとう

4

4 に答える 4

4

さて、あなたがおそらく知っておくべきいくつかのことは、あなたが割り当てたjson文字列jsdata = JSON.parse(data);を解析し、それをJSオブジェクトとして返そうとします。私はあなたが反対をしたいと思います:datajsdata = JSON.stringify(data);

さらに、jQueryを使用しているので、その行を省略できます。jQueryは、リクエストを送信する前にデータを適切な形式に変換します。自分で解析したり文字列化したりする必要はありません。

于 2012-08-14T12:21:07.560 に答える
1

ええ、2行の終わりを忘れた;ので、PHPはJSONに準拠していないエラーを出力しています。

常にこれを行います:

  • エラーをキャッチし、アプリケーションによって不安定な方法で出力します(5xxステータスで十分な場合があります)
  • 次回これを入手するときは、Chrome DevelopperツールまたはFirebugを使用して、アプリが実際に何を返すかを確認してください
  • また、異なるjsonpではなく、jsonを出力しており、アプリが期待するものです。
于 2012-08-14T12:21:06.300 に答える
0
$.ajax({
  type: "post",
  data: jsdata,
  url: "url",
  crossDomain: true,
  dataType: 'jsonp',
  success: function(d) {
    print("success");
  }
})

この方法で試してみてください

于 2012-08-14T12:23:31.870 に答える
0

これは、見た目よりもはるかに簡単です。

JSON をエンコードして JavaScript にエコーする前に、 ( の各データ値に対して) urlencode($arr['a'])andを呼び出します。これにより、配列内のデータがURL エンコードされるため、問題は発生しません。urlencode($arr['b'])$arr$data

JSON の解析が完了したらunescape(string)、大きなデータ値ごとに JavaScript 関数を呼び出す必要があります。これにより、元の状態に戻ります。これは、PHP と JavaScript の一種のスーパーヒーロー チームアップです。

于 2012-08-14T12:36:30.237 に答える