在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(通过 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 <
由于数据包含许多不同的内容,因此 收到这些错误是正常的 .他们需要正确逃脱.谁能告诉我如何正确地做到这一点.无论数据是什么,我都不应该得到关于数据的错误。
谢谢
好吧,您可能应该知道的几件事jsdata = JSON.parse(data);
尝试解析分配给data
的任何 json 字符串,并将其作为 JS 对象返回。我认为你想反其道而行之:jsdata = JSON.stringify(data);
此外,由于您使用的是jQuery,因此您可以省略该行:jQuery无论如何都会在发送请求之前将数据转换为适当的格式,无需自己费心解析或字符串化。
是的,你忘记了两行末尾的;
,所以PHP输出了一个错误,这不符合JSON。
始终这样做:
- 捕获错误并以应用程序不稳定的方式输出它们(5xx 状态就足够了)
- 下次你遇到这个时,使用Chrome Developper工具或Firebug来查看你的应用真正返回的内容 。
- 此外,您输出的是 json,而不是 jsonp,这是不同的,以及您的应用程序期望的
$.ajax({
type: "post",
data: jsdata,
url: "url",
crossDomain: true,
dataType: 'jsonp',
success: function(d) {
print("success");
}
})
试试这种方式
这比看起来简单得多。
在对 JSON 进行编码并将$data
回显到 JavaScript 之前,调用 urlencode($arr['a'])
和 urlencode($arr['b'])
(对于 $arr
中的每个数据值)。这将对数组中的数据进行 URL 编码,这样就不会给您带来任何问题。
解析完 JSON 后,必须对每个大数据值调用 JavaScript 函数unescape(string)
。这将使它们恢复到原来的样子。这是PHP和JavaScript的超级英雄联手!