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 + SunlightLabs API 帮助