jquery.get和servlet

时间:2011-08-14 10:54:44

标签: java javascript jquery ajax servlets

我想要一个servlet来处理GET请求并返回一个字符串。

非常简化的版本是:

public class handlequery extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException
    {
        response.setContentType("text");
        PrintWriter out = response.getWriter();
        out.println("videoid");
    }
}

但回调中的返回data(我在下面检查如下)是 - object XML Document

$.get("handleq", function(data, textStatus) {
    alert("Done, with the following status: " + textStatus + "." +
          " Here is the response: " + data);
});

当我得到object XML Document时,有人可以告诉我数据为videoid的原因吗?

3 个答案:

答案 0 :(得分:3)

据我所知,没有这样的内容类型只是“文本”,所以它可能默认为XML。

将行更改为:

response.setContentType("text/plain");

答案 1 :(得分:2)

text本身不是有效的内容类型。我建议你改用text/html

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("videoid");

并在客户端调用$.get()中指定该内容类型:

$.get("handleq", function(data, textStatus) {
    alert("Done, with the following status: " + textStatus
        + ". Here is the response: " + data);
}, "html");

答案 2 :(得分:2)

get上的jquery文档说:

  

成功回调函数传递返回的数据,该数据将是XML根元素,文本字符串,JavaScript文件或JSON对象,具体取决于响应的MIME类型。它还传递了响应的文本状态。

这意味着servlet返回的数据格式取决于响应的HTTP Content-Type。您正在设置的文本“text”不是有效的MIME类型。因此,jQuery将无法识别此格式,并将其解释为Javascript端的XML文档。您想要的正确MIME类型是“text / plain”。

尝试

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
    response.setContentType("text/plain");
    PrintWriter out = response.getWriter();
    out.println("videoid");
    out.close();
}

然后你应该收到“videoid”而不是XML文档。

您还应该向jQuery暗示您收到的是“文字”,而不是您的回复中的任何其他内容:

$.get("handleq", function(data, textStatus) {
    alert("Done, with the following status: " + textStatus + "." +
          " Here is the response: " + data);
}, "text");