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

我的 javascript 代码包含一个 jquery ajax 调用 $.ajax 。它调用包含上述 php 代码的文件,因此,成功后,json_encoded(by 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

好吧,您可能应该知道的几件事jsdata = JSON.parse(data);试图解析您分配给的任何json 字符串data,并将其作为 JS 对象返回。我认为你想做相反的事情:jsdata = JSON.stringify(data);

此外,由于您使用的是 jQuery,因此您可以省略该行:无论如何,jQuery 都会在发送请求之前将数据转换为适当的格式,无需自己进行解析或字符串化

于 2012-08-14T12:21:07.560 回答
1

是的,你忘记了;两行末尾的,所以 PHP 输出了一个错误,它不符合 JSON。

总是这样做:

  • 捕获错误并以应用程序不稳定的方式输出它们(5xx 状态就足够了)
  • 下次遇到此问题时,请使用 Chrome Developper 工具或 Firebug 来查看您的应用真正返回的内容
  • 此外,您输出的是 json,而不是 jsonp,它与您的应用程序所期望的不同
于 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'])urlencode($arr['b'])(对于 中的每个数据值)。这将对数组中的数据进行URL 编码,这样就不会给您带来任何问题。$arr$data

解析完 JSON 后,您必须unescape(string)对每个大数据值调用 JavaScript 函数。这将使他们恢复到原来的样子。这是一种 PHP 和 JavaScript 的超级英雄组合!

于 2012-08-14T12:36:30.237 回答