我正在尝试运行以下内容:
$.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 undefined(undefined)
非常感谢任何帮助。
答案 0 :(得分:4)
same-origin policy不允许跨域AJAX请求。这意味着您无法以正常方式执行跨域请求,并且是第二个示例中出错的原因。
在第一个示例中,您正在尝试解决方法 - JSONP。这可以通过将script
元素放入引用外部脚本的页面来实现。外部脚本必须通过在函数调用中包装数据来响应。如果外部脚本不支持执行此操作(而且似乎digg不支持),则不能使用JSONP解决方法。
由于服务器发送JSON数据(因为它不支持JSONP),当您尝试将其解析为常规Javascript时,浏览器会感到困惑。这是您第一次出错的原因。
似乎digg 支持JSONP,但需要额外的参数type=javascript
:
$.getJSON('http://services.digg.com/2.0/story.getTopNews?limit=25&type=javascript&callback=?', function(data) {
console.log(data);
});
这适合我。