为什么从我的jQuery.getJSON()方法调用fail方法?

Why is the fail method being called from my jQuery.getJSON() method?

本文关键字:方法 调用 fail 我的 jQuery getJSON 为什么      更新时间:2023-09-26

我有一个html页面直接从web浏览器(FF 14.0.1或Chromium, Ubuntu 12.04)的本地文件加载

这个html页面包含一个本地的jQuery js文件,然后用这个方法包含一个本地的js文件:

function start() {
     $.getJSON("http://localhost:8080/app/connect?callback=?", "id=11", function() { alert("win!"); })
     .done(function() { alert("done"); })
     .fail(function(xhr, request, error) { alert(xhr.status + "<> + request + "<>" + error); }); }

我正在响应来自JBoss/Restful web服务器的这些请求,没有特殊配置,服务器上的方法用@Produces({"application/json"})注释。服务器没有显示任何错误,甚至得到正确的id值

当我触发这个javascript时,fail方法被调用,我得到这个警告:

200<>parsererror<>jQuery311391951_513134 was not called

当使用Firebug检查时,我可以看到JSON响应,它看起来不错。在Chromium中,我可以检查请求/响应头,一切看起来都很好。我保存了这段文字,如果有人认为它可以提供更多的见解。

谁能告诉我发生了什么事?为什么会出现这个错误?

提前感谢!

看起来您正在访问本地资源,在这种情况下您不必使用jsonp。您可以从url中删除callback=?

当您必须访问违反同源策略的第三方资源时使用

function start() {
    $.getJSON("http://localhost:8080/app/connect", "id=11", function() { 
        alert("win!");
    }).done(function() { 
        alert("done"); 
    }).fail(function(xhr, request, error) { 
        alert(xhr.status + "<>" + request + "<>" + error); 
    }); 
}

您正在使用JSONP (JSON with Padding)。服务器必须理解?callback=参数,并用回调函数包装JSON应答。这对于应用SOP限制的呼叫是强制性的。如果不是(相同的域和端口),则删除回调参数