jQuery $.getJSON() 失败

Posted

技术标签:

【中文标题】jQuery $.getJSON() 失败【英文标题】:jQuery $.getJSON() Fails 【发布时间】:2013-08-10 21:26:02 【问题描述】:

我在使用 $.getJSON() 时不断出错。我正在使用 JSONP。代码如下:

$.getJSON('http://s3.amazonaws.com/eloqu/TestFile.js?callback=?', function(data)
    console.log(data);
)
.fail(function( jqxhr, textStatus, error ) 
    console.log( "Request Failed: " + textStatus + ', ' + error);
);

我得到的只是一个“解析器错误”。如果我将 url 的结尾更改为 callback=mycallback,我只会得到“错误”,没有类型。

【问题讨论】:

尝试在你的失败处理程序中输出error。您的网址中的第二个?可能需要转义到%3f 你返回的 json 是什么?它是否包含在 mycallback 函数中? @James 您使用的是$.getJSON(),它是json,而不是jsonp 您可能需要使用$.ajax 并将dataType 设置为jsonp 转义第二个问号修复了我的解析器错误,但它仍然不起作用。错误仍然是空白。您可以从该 URL 看到 JSON。 @JasonP 根据 jQuery 文档,它应该将带有回调参数的任何 url 解释为 JSONP。他们的 Flickr 示例使用了它。 【参考方案1】:

你的回报是这样的:

mycallback( "test": "variable", "test2": "variable2" )

而一个有效的 json 应该是:

 "test": "variable", "test2": "variable2" 

有效的 json 只能以数组符号 [ 或对象符号 开头 你可以验证http://jsonlint.com上的任何json字符串

【讨论】:

我使用 JSONP 因为这是一个跨域请求。 抱歉没有注意到这是 jsonp【参考方案2】:

这有点奇怪……

这是一个有效的小提琴.. 我必须定义 mycallback 函数:

http://jsfiddle.net/xtKAb/

$(document).ready(function () 
    $.getJSON('http://s3.amazonaws.com/eloqu/TestFile.js?callback=?');
);

function mycallback(data) 
    console.log(data);

我认为问题在于远程文件是静态的。一般你发送你想要的回调,远程服务将数据包装在你指定的回调中。这是 jQuery 发出的实际请求的示例:

http://s3.amazonaws.com/eloqu/TestFile.js?callback=jQuery20209767435337416828_1376014401926&_=1376014401927

所以 jQuery 期望回调是jQuery20209767435337416828_1376014401926(),但这不会发生(因为远程文件是静态的)。由于数据没有到达 jQuery 所期望的回调,它很可能会尝试 json 解析一个未定义的对象,这会给您带来解析错误。

【讨论】:

以上是关于jQuery $.getJSON() 失败的主要内容,如果未能解决你的问题,请参考以下文章

jQuery:处理 getJSON() 中的错误?

jQuery:请求 getJSON + SunlightLabs API 帮助

jQuery 返回 $.getJSON 值

jQuery 中 $.getJSON() 和 $.ajax() 的区别

jQuery.getJSON 不会触发回调

jQuery中$.getJSON