AJAX POST / GET请求抛出空错误,但Glassfish服务器似乎正在响应

时间:2012-01-21 02:04:01

标签: jquery ajax post get jax-rs

我使用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(虽然我不熟悉它的用法,所以可能做错了)。我仍然在错误回调中结束,在错误参数中没有明显的有用信息(大多数东西只返回未定义或空)。

在这一点上,我真的很感激一些关于我做错了什么的建议。谢谢!

1 个答案:

答案 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();