我使用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"
});
我尝试过对数据,dataType,contentType等的各种修改和排除,但它们总是会抛出错误回调。我也尝试修改GET和POST函数的返回值,包括尝试使用JAX-RS Responsebuilder(虽然我不熟悉它的用法,所以可能做错了)。我仍然在错误回调中结束,在错误参数中没有明显的有用信息(大多数东西只返回未定义或空)。
在这一点上,我真的很感激一些关于我做错了什么的建议。谢谢!
答案 0 :(得分:0)
我解决了这个问题 - 我必须了解CORS。最终问题是标题中的原点是空的,因为我在本地工作。将以下代码添加到我的POST响应函数解决了这个问题(虽然我需要在生产服务器上更健壮的东西):
ResponseBuilder builder = Response.ok("<html lang=\"en\"><body><h1>POST RESPONSE</h1></body></html>");
builder.header("Access-Control-Allow-Origin", "*");
return builder.build();