将 $.getJSON() 与 jQuery 一起使用时出现问题



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

$.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:2未捕获语法错误:意外令牌:

我也尝试过这样的事情:

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。访问控制允许源不允许源 http://sumews.com。services.digg.com/2.0/story.getTopNews?limit=25GET http://services.digg.com/2.0/story.getTopNews?limit=25 未定义(未定义)

任何帮助将不胜感激。

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

这对我有用。

最新更新