【问题标题】:jQuery JSON parsererror even though JSON is validjQuery JSON parsererror 即使 JSON 是有效的
【发布时间】:2013-11-22 09:19:58
【问题描述】:

我正在尝试提取一些外部 JSON 电话列表以进行我在本地进行的测试。

JSON = https://www.o2.co.uk/shop/homepage/scripts/phoneList.json

我已经阅读了一个单独的线程来克服允许来源/跨域问题,您可以传递“回调=?”到网址的末尾。这似乎工作正常,因为现在在 devtools 网络选项卡中我可以看到文件被正常提取。

但是,我从来没有让它进入成功回调函数。它总是带回 parsererror

根据 jsonlint.com,代码 100% 有效

一个sn-p的代码如下:

$.ajax({
          type: 'GET',
          url: 'https://www.o2.co.uk/shop/homepage/scripts/phoneList.json?callback=?',
          contentType: 'application/json; charset=utf-8',
          cache: true,
          dataType:'json',
          success: function(response) {
            console.log(response);
          },
          error: function(jqXHR, textStatus, errorThrown) {
            console.log(jqXHR);
            console.log(textStatus);
            console.log(errorThrown);
          }
        });

欢迎任何想法,因为我很好,真的卡住了。

谢谢。

【问题讨论】:

  • 你试图在似乎不支持它的资源上使用jsonp
  • 只传递callback=? 不会发出跨域请求,服务器端需要支持这样的响应
  • 不完全确定,但从 Url 返回的 JSON 是一个数组而不是一个对象 - 这可能会扰乱解析器。
  • 但我可以在 devtools 中看到文件和响应?所以文件没有被阻止或什么?
  • 该服务似乎不支持 CORS,因此您无法通过 Ajax 访问它。

标签: json jquery jsonp


【解决方案1】:

JSONP 仅在服务器支持时才有效。服务器需要做的是获取你的回调参数并将 json 数据包装在具有该名称的函数调用中。

所以当https://www.o2.co.uk/shop/homepage/scripts/phoneList.json 回复时

[{
"handset":"Alcatel 10.30 Black",
"link":"/shop/phones/alcatel/10.30-black/"
}]

https://www.o2.co.uk/shop/homepage/scripts/phoneList.json?callback=MyCallback 应回复:

MyCallback([{
"handset":"Alcatel 10.30 Black",
"link":"/shop/phones/alcatel/10.30-black/"
}]);

如果服务器不这样做,JSONP 就无法工作。也许 O2 不希望您使用他们的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多