使用jQuery的getJSON获取JSON值

时间:2011-12-12 14:05:42

标签: jquery getjson

我试图用getJSON方法获取json值。

var myurl = 'http://otherdomain.com/api.json?value=something&callback=?';
$.getJSON(myurl,function(data){
    console.log('successful!');
}).error(function(){
    console.log('Error message: ' + e.statusText);
});

最终结果是:错误消息:成功而不是json数据,尽管网络响应确实在开发者控制台中显示 json数据。例如。回复数据:

  

[{ “第一”: “约翰”, “FirstLength”:[4], “上次”: “Doe的”, “LastLength”:[3]}]

如果我直接从浏览器打开链接,它会正常加载。

如果我删除& callback =?我收到这条消息:

  

XMLHttpRequest无法加载http://otherdomain.com/api.json?value=something。 Access-Control-Allow-Origin不允许原点http://localhost

我还有哪些其他选择可以避免此问题?感谢

3 个答案:

答案 0 :(得分:1)

我最初回答了这个问题,认为由于第二个'?'而导致网址无效字符。由于吸引了否定投票,我意识到我的错误,这是使用JQuery随机生成的回调函数名称的标准JSONP语法。

所以我做了一些研究来弥补我原来的naff帖子并为你提供一些想法。

您提到的回复数据[{"First":"John","FirstLength":[4],"Last":"Doe","LastLength":[3]}]来自我所看到的valid JSON。但是根据这篇关于Bug with json4j的帖子,看起来有些库可能会以sqaure括号开始处理你的响应。如果删除前导和尾随方括号,以便将单个javascript对象返回到回调函数而不是数组,问题是否会消失?

从阅读以下两篇优秀帖子看起来你没有得到你通常会得到的标准JQuery错误处理(正如你所描述的)

http://www.fbloggs.com/2010/07/09/how-to-access-cross-domain-data-with-ajax-using-jsonp-jquery-and-php/

因为JSONP依赖于脚本标记,所以它不使用底层HTTPRequest对象的回调功能。这意味着当您使用JSONP时,$ .ajax()方法上的成功,失败,完整回调函数无关紧要且无法正常运行。

http://www.ibm.com/developerworks/library/wa-aj-jsonp1/

首先,JSONP调用没有错误处理。如果动态脚本插入有效,则会调用;如果没有,没有任何反应。它只是默默无闻。

从这些帖子中,我的另一个建议是试图明确将dataType作为JSONP返回。 JQuery的$.ajax可能与$.json的行为不同。所以尝试使用像这样的显式回调函数......

$.ajax({
   url: surl,
   data: {id: id},
   dataType: "jsonp",
   jsonp : "callback",
   jsonpCallback: "jsonpcallback"
   });

这最后的建议要求JQuery 1.4 +

答案 1 :(得分:0)

我可能在这里错了...但是你知道你正在调用jQuery.error method ...就像你在抛出一条错误消息而不是在你的getJson上处理错误回调一样。

答案 2 :(得分:0)

会是这样的:

function fetch_feed(url){
        var newScript = document.createElement('script');
        newScript.type = 'text/javascript';
        newScript.src = url;
        jQuery('body').append(newScript);
    }

function successMethod(data){
    console.log('successful!');
}

fetch_feed("http://otherdomain.com/api.json?value=something&callback=successMethod");