jquery.get and servlet

jquery.get and servlet

本文关键字:servlet and get jquery      更新时间:2023-09-26

我想要一个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 ?

据我所知,没有像"text"这样的内容类型,所以它可能默认为XML。

将行改为:

response.setContentType("text/plain");

关于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中暗示你正在接收"text"而不是其他任何东西:

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

就其本身而言,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");