0

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

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

提前致谢!

4

2 回答 2

2

看起来您正在访问本地资源,在这种情况下您不必使用 jsonp。您可以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); 
    }); 
}
于 2013-04-24T11:21:21.343 回答
1

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

于 2013-04-24T11:22:59.663 回答