【问题标题】:return Json syntax error返回 Json 语法错误
【发布时间】:2014-11-15 05:24:49
【问题描述】:

我正在尝试显示作为 json 数据返回的数据。但我收到返回的数据作为错误。

这是我的代码:

  $.ajax({
     url:"http://excelonlineclasses.com/test.json",
     dataType: "jsonp",
     success: function(data){
         alert(data.facets.stats.total);
     } 
  });

我尝试过$.getJson,但它不起作用 请找到小提琴链接http://jsfiddle.net/6Yj5h/1680/

请给我解决方案。提前致谢

【问题讨论】:

  • *“我将返回的数据作为错误”..?
  • 请打开 jsfiddle 链接并查看控制台您会发现语法错误。但它仅是有效的 json
  • jsfiddle 不允许对外部网站 AFAIK 的请求。所以最好描述一下这个问题......
  • 我相信你的demo很好,jsfiddle也很好。我认为问题在于 url 提供一个 json 对象,not 一个 jsonp 对象。见此链接:stackoverflow.com/questions/19165925/…
  • 是的,它只是 json 对象。当我删除 jsonp 时,我得到了跨浏览器的 excelption

标签: javascript jquery ajax json


【解决方案1】:

如果您收到跨域请求错误,那么您可以设置标头以允许跨域请求在 php 中,您可以通过添加这行代码来实现:

header('Access-Control-Allow-Origin: *');

(但请确保您确实想要启用跨域请求 - * 表示来自任何站点!并且您知道自己在做什么。在某些情况下,出于安全原因,您可能不想允许这样做)

【讨论】:

  • 我知道 jquery 有什么办法
  • 头部由服务器设置
【解决方案2】:

ne1410s 是正确的:URL 提供 JSON,而不是 JSONP。

你有三个选择:

  1. 获取提供 JSONP 的 URL
  2. 让服务器支持 CORS(跨域资源共享)
  3. 编写您自己的服务器端脚本来获取数据,然后从与脚本相同的域将其提供给您的脚本

我相信还有第四种选择,但老实说,它只是从这里变得更加 hack-ish。

要让服务器支持 CORS,您需要在标头中添加一些内容,例如:

Access-Control-Allow-Origin: http://excelonlineclasses.com/
Access-Control-Allow-Methods: GET
Access-Control-Allow-Headers: content-type
Access-Control-Max-Age: 10

...但它并没有就此结束。浏览器可以发送一个 OPTIONS 请求(除了 GET 或 POST)来了解服务器对 CORS 的感觉。在这种情况下,上面确实是服务器应该返回的内容。

如果你想设置 CORS,我建议阅读 http://enable-cors.org/ 之类的内容

【讨论】:

  • 如何让服务器支持CORS(跨域资源共享)
  • 我编辑了我的答案以举一个简短的例子。你真的应该先检查是否有 OPTIONS 请求。
猜你喜欢
  • 2014-09-02
  • 2021-01-04
  • 2013-06-13
  • 2013-11-26
  • 2011-11-17
  • 2018-05-23
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多