使用带有jQuery的$ .getJSON()时出现问题

时间:2011-05-15 20:36:46

标签: jquery api digg

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

$.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)

非常感谢任何帮助。

1 个答案:

答案 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);
});

这适合我。