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

时间:2013-04-24 11:10:25

标签: javascript jquery

我有一个直接从网页浏览器中的本地文件加载的html页面(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中,我可以检查请求/响应标头,一切看起来都不错。如果有人认为可以提供更多见解,我保存了该文本。

谁能告诉我发生了什么事?为什么我会收到此错误?

提前致谢!

2 个答案:

答案 0 :(得分:2)

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

如果您必须访问具有Same Origin Policy违规行为的第三方资源

,则会使用它
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); 
    }); 
}

答案 1 :(得分:1)

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