JavaScript意外的令牌<,有什么方法可以逃避错误(或至少跳过那些无用的字符)


javascript unexpected token < , is there any way I can escape the errors(or atleast skip those useless characters)

在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的超级英雄联手!