Javascript 为什么从jQuery.getJSON()方法调用fail方法?
我有一个html页面,直接从web浏览器中的本地文件加载(FF 14.0.1或Chromium,在Ubuntu 12.04上) html页面包含一个本地jQuery js文件,然后使用以下方法包含一个本地js文件: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(
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响应封装在回调中(在另一个伟大的答案中可以找到)。感谢所有帮助过我的人!