在 jQuery 中使用 $.getJSON() 时出现问题
我正在尝试运行以下命令:
$.getJSON('http://services.digg.com/2.0/story.getTopNews?limit=25&callback=?', function(data) {
console.log(data);
});
但我得到:
story.getTopNews:-1Resource 解释为脚本,但使用 MIME 类型 application/json 进行传输。 Story.getTopNews:2Uncaught SyntaxError: 意外的标记:
我也尝试过类似的操作:
var url = "http://services.digg.com/2.0/story.getTopNews?limit=25";
$.ajax({
url: url,
crossDomain:true,
dataType: "json",
success:function(data,text,xhqr) {
console.log(data);
}
});
我得到这个:
XMLHttpRequest 无法加载 http://services.digg.com/2.0/story.getTopNews?limit=25。 Access-Control-Allow-Origin 不允许来源 http://sumews.com。 services.digg.com/2.0/story.getTopNews?limit=25GET http:// services.digg.com/2.0/story.getTopNews?limit=25 未定义(未定义)
任何帮助将不胜感激。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
同源策略不允许跨域 AJAX 请求。这意味着您无法以正常方式执行跨域请求,这也是第二个示例中出现错误的原因。
在第一个示例中,您正在尝试解决方法——JSONP。这是通过将
script
元素放入引用外部脚本的页面来实现的。外部脚本必须通过将数据包装在函数调用中来做出响应。如果外部脚本不支持执行此操作(而且似乎 digg 不支持),则您无法使用 JSONP 解决方法。由于服务器发送 JSON 数据(因为它不支持 JSONP),因此当您的浏览器尝试将其解析为常规 Javascript 时,它会感到困惑。这是您第一个错误的原因。
看来digg确实支持JSONP,但它需要一个额外的参数
type =javascript
:这对我有用。
Cross-domain AJAX requests are disallowed by the same-origin policy. This means that you can't do cross-domain requests in the normal way, and is the cause of the errors in your second example.
In the first example, you are trying the workaround -- JSONP. This works by putting a
script
element into the page that references the external script. The external script must respond by wrapping the data in a function call. If the external script does not support doing this (and it seems digg does not) than you cannot use the JSONP workaround.Since the server sends JSON data (since it doesn't support JSONP), your browser gets confused when it tries to parse it as regular Javascript. This is the cause of your first errors.
It seems that digg does support JSONP, but it needs an extra argument
type=javascript
:This works for me.