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

Javascript 为什么从jQuery.getJSON()方法调用fail方法?,javascript,jquery,Javascript,Jquery,我有一个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(

我有一个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); }); }
函数开始(){
$.getJSON(“http://localhost:8080/app/connect?callback=?,“id=11”,函数(){alert(“win!”;})
.done(函数(){alert(“done”);})
.fail(函数(xhr,请求,错误){alert(xhr.status+“+请求+”“+错误);})}
我从一个JBoss/Restful web服务器响应这些请求,没有特殊配置,服务器上的方法用@products({“application/json”})注释。服务器没有显示任何错误,甚至正确获取id值

当我触发此javascript时,将调用fail方法,并收到以下警报:

200<>parsererror<>jQuery311391951_513134 was not called
200parsererrorjQuery311391951\u 513134未调用
在使用Firebug进行检查时,我可以看到JSON响应,它看起来很好。在Chromium中,我可以检查请求/响应头,所有内容看起来都很好。如果有人认为它可以提供更多信息,我已经保存了该文本

有人能告诉我发生了什么吗?为什么我会犯这个错误


提前感谢!

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

如果您必须访问有冲突的第三方资源,则使用此选项

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); 
    }); 
}
函数开始(){
$.getJSON(“http://localhost:8080/app/connect,“id=11”,函数(){
警惕(“赢!”);
}).done(函数(){
警惕(“完成”);
}).fail(函数(xhr、请求、错误){
警报(xhr.status+“”+请求+“”+错误);
}); 
}

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

如果您必须访问有冲突的第三方资源,则使用此选项

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); 
    }); 
}
函数开始(){
$.getJSON(“http://localhost:8080/app/connect,“id=11”,函数(){
警惕(“赢!”);
}).done(函数(){
警惕(“完成”);
}).fail(函数(xhr、请求、错误){
警报(xhr.status+“”+请求+“”+错误);
}); 
}

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

您使用的是JSONP(带填充的JSON)。服务器必须取消对
?callback=
参数的支持,并使用回调函数包装JSON应答。这对于适用SOP限制的调用是必需的。如果不是(相同的域和端口)然后删除回调参数。

因为您需要一个jsonp响应,但可能没有从服务器发送jsonp响应。您可以从urlah中删除
回调=?
,我需要修改服务器的响应!谢谢您,Arun。此请求将来可能不是本地的,因此我可能仍然需要回调参数rameter?因为您需要一个jsonp响应,但您可能没有从服务器发送jsonp响应。您可以从urlah中删除
回调=?
,我需要修改服务器的响应!谢谢您,Arun。这个请求将来可能不是本地的,所以我可能仍然需要回调参数。谢谢您的回复!将来的这个请求可能不是本地的,所以我可能仍然需要回调参数?然后您必须在您的应用程序中实现jsonp支持serverside@PhillipAtkinsonjson响应类似于
{“name”:“some name”}
,但jsonp的格式是
({“name”:“some name”})
我想我明白了。非常感谢。:)作为后续,它现在工作得非常好。我添加了一个servlet过滤器,将json响应封装在回调中(如另一个伟大的答案所示)。感谢所有帮助过我的人!谢谢你的回复!将来的请求可能不是本地的,所以我可能仍然需要回调参数?然后你必须在你的应用程序中实现jsonp支持serverside@PhillipAtkinsonjson响应类似于
{“name”:“some name”}
,但jsonp的格式是
({“name”:”一些名字“})
我想我明白了。非常感谢。:)作为后续,它现在工作得很好。我添加了一个servlet过滤器,将json响应封装在回调中(在另一个伟大的答案中可以找到)。感谢所有帮助过我的人!