【问题标题】:jQuery $.getJSON() FailsjQuery $.getJSON() 失败
【发布时间】: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 示例使用了它。

标签: jquery jsonp getjson


【解决方案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 解析一个未定义的对象,这会给您带来解析错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-31
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 2014-07-03
    相关资源
    最近更新 更多