【问题标题】:Problem using $.getJSON() with jQuery在 jQuery 中使用 $.getJSON() 时出现问题
【发布时间】:2011-05-15 20:36:46
【问题描述】:

我正在尝试运行以下命令:

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

但我得到:

story.getTopNews:-1资源被解释为脚本,但使用 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未定义(未定义)

任何帮助将不胜感激。

【问题讨论】:

    标签: jquery api digg


    【解决方案1】:

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

    这对我有用。

    【讨论】:

    • +1 开发人员还有什么期望? - 来自真实情况的好问题,以及像这里这样的优秀答案。再加上一些你自己的尝试,解决这个问题,你可以免费获得最好的学习体验,这要归功于 SO 及其优秀的社区。​​span>
    • 我自己说得再好不过了!感谢 lonesomeday 的帮助!
    猜你喜欢
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多