【问题标题】:Why is the fail method being called from my jQuery.getJSON() method?为什么我的 jQuery.getJSON() 方法调用了 fail 方法?
【发布时间】:2013-04-17 21:53:57
【问题描述】:

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

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

提前致谢!

【问题讨论】:

  • 因为您期待 jsonp 响应,但您可能没有从服务器发送 jsonp 响应
  • 您可以从网址中删除callback=?
  • 啊,我需要修改服务器的响应!谢谢阿伦。以后这个请求可能不是本地的,所以我可能还需要回调参数?

标签: javascript jquery


【解决方案1】:

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

【讨论】:

    【解决方案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); 
        }); 
    }
    

    【讨论】:

    • 感谢您的回复!以后这个请求可能不是本地的,所以我可能还需要回调参数?
    • 那么你必须在你的服务器端实现 jsonp 支持
    • @PhillipAtkinson json 响应类似于 { "name" : "some name"},但 jsonp 格式为 &lt;callback-passed-by-cliebt&gt;({ "name" : "some name"})
    • 我想我明白了。非常感谢。 :)
    • 作为后续,它现在完美运行。我添加了一个 servlet 过滤器以将 json 响应包装在回调中(如在另一个很好的答案 stackoverflow.com/questions/5350924/… 中找到的那样)。感谢所有帮助过的人!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2015-08-01
    • 2013-12-02
    相关资源
    最近更新 更多