jquery.get и сервлет - PullRequest
       0

jquery.get и сервлет

2 голосов
/ 14 августа 2011

Я хочу, чтобы сервлет обработал запрос 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 ]

3 голосов
/ 14 августа 2011

Насколько мне известно, такого типа контента, как просто "текст", не существует, поэтому по умолчанию он возвращается в XML.

2 голосов
/ 14 августа 2011

Документация jquery на get гласит:

В функцию обратного вызова success передаются возвращенные данные, которые будут корневым элементом XML, текстовой строкой, файлом JavaScript или объектом JSON, в зависимости от типа ответа MIME. Также передается текст статуса ответа.

Это означает, что формат данных, возвращаемых сервлетом, зависит от типа содержимого HTTP вашего ответа. Тот, который вы устанавливаете, «текст», не является допустимым типом MIME. Таким образом, jQuery не распознает этот формат и будет интерпретировать его как XML-документ на стороне Javascript. Правильный тип 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");
2 голосов
/ 14 августа 2011

Сам по себе 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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...