3

我正在尝试运行以下内容:

$.getJSON('http://services.digg.com/2.0/story.getTopNews?limit=25&callback=?', function(data) {
    console.log(data);
});

但我得到:

story.getTopNews:-1Resource 被解释为 Script 但以 MIME 类型 application/json 传输。story.getTopNews:2Uncaught SyntaxError: Unexpected token :

我也尝试过这样的事情:

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未定义(未定义)

任何帮助将不胜感激。

4

1 回答 1

4

同源策略不允许跨域 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);
});

这对我有用。

于 2011-05-15T20:44:17.680 回答