我使用 JAX-RS 在 Glassfish 服务器上设置了一些非常简单的 Web 服务。最初一切似乎都工作正常 - 我会通过浏览器看到预期的响应(例如返回的 HTML)。代码如下:
@GET
@Produces("text/HTML")
public String getHtml() {
return "<html lang=\"en\"><body><h1>GET RESPONSE</body></h1></html>";
}
@POST
@Produces("text/HTML")
@Consumes("text/plain")
public String postText(String content)
{
return "<html lang=\"en\"><body><h1>POST RESPONSE: " + content + "</body></h1></html>";
}
正如您所看到的,这非常基本。
当我尝试使用 Javascript 对这些 Web 服务进行 AJAX 调用时,问题就开始了。 POST 和 GET 调用始终失败,没有有用的错误信息。我在 Firefox 的 Firebug 插件中检查了响应结果,响应代码显示 200 ok,尽管 Firebug 在 HTML 面板中没有显示任何内容,这可能表明存在问题。这是 JavaScript:
$.ajax({
type: "POST",
url: "http://localhost:8080/TestEngine/API/",
data: "string",
dataType: "html",
success: function(data, textStatus, jqXHR) {
alert("success");
},
error: function(jqXHR, textStatus, errorThrown) {
alert("error:" + errorThrown );
},
contentType: "text/plain"
});
我尝试过对数据、数据类型、内容类型等进行各种修改和排除,但最终总是抛出错误回调。我还尝试修改 GET 和 POST 函数的返回值,包括尝试使用 JAX-RS Responsebuilder(尽管我不熟悉它的用法,所以可能做得不正确)。我仍然以错误回调结束,错误参数中没有明显有用的信息(大多数内容只是返回未定义或空)。
在这一点上,我真的很感激一些关于我做错了什么的建议。谢谢!
最佳答案
我解决了这个问题 - 我必须了解 CORS。最终的问题是 header 中的原点为空,因为我在本地工作。将以下代码添加到我的 POST 响应函数中解决了该问题(尽管我需要在生产服务器上提供更强大的功能):
ResponseBuilder builder = Response.ok("<html lang=\"en\"><body><h1>POST RESPONSE</h1></body></html>");
builder.header("Access-Control-Allow-Origin", "*");
return builder.build();
关于jquery - AJAX POST/GET 请求抛出空错误,但 Glassfish 服务器似乎响应正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8950091/