Cadena HTML de JavaServlet interpretada como #document en Javascript en lugar de cadena

Tenemos un JavaServlet en ejecución que nos proporciona los datos necesarios. El problema es la forma en que Jquery interpreta estos datos.

La información se envía a través del autor de respuestas. (Ej: mensajes)

protected void doPost(HttpServletRequest request,
    HttpServletResponse response)
        throws ServletException {

    String body = "";
    for (Message msg : messages) {
        body += "<div class=\"Message\" id=\"" + msg.getId() + "\">"
            + *inner information*
            + "</div>";
    }
    response.getWriter().write(body);
}

La información se obtiene a través de solicitudes Ajax.

$.ajax({
    type: 'POST',
    url: 'message.jsp',
    data: { *Needed data* },
    success: function(data) {
        $('#element').append(data);
    }
});

Esto a veces funciona ya veces no. Así que revisamos la consola en Chrome y dejamos que el código se detuviera en la línea de agregar. Cuando se envían varios mensajes, los 'datos' en la función de éxito se interpretan como una gran cadena,

"<div class="message" id="153" onclick="loadFullMessage(153)"></div>
<div class="message" id="154" onclick="loadFullMessage(154)"></div>
<div class="message" id="155" onclick="loadFullMessage(155)"></div>
<div class="message" id="156" onclick="loadFullMessage(156)"></div>
"

pero cuando solo se envía 1 mensaje/div, se interpreta como un objeto '#document'.

#document
    <div class=​"message" id=​"174" onclick=​"loadFullMessage(174)​">​…​</div>​

El mensaje está disponible como se puede ver en la consola de Chrome, pero al agregar el siguiente error se encuentra "Error no detectado: HIERARCHY_REQUEST_ERR: DOM Exception 3".

¿Cómo se pueden interpretar los datos siempre como una cadena y no cambiar al objeto del documento?

preguntado el 22 de mayo de 12 a las 15:05

Resuelto agregando "tipo de datos: 'html'" a la solicitud de ajax... -

2 Respuestas

@boblail tiene razón - cambiando dataType a ajax lo hará Sin embargo, a veces usa bibliotecas de terceros que no va a modificar. Es JQuery UI en mi caso.

Enviando Content-Type: application/xhtml+xml hace que JQuery cree un documento DOM a partir de la respuesta. Establecer su Content-Type a text/html Y estás bien.

respondido 19 nov., 12:10

Acabo de resolver un problema muy similar agregando dataType de las personas acusadas injustamente llamadas ajax llamada:

$.ajax({
  type: 'POST',
  url: 'message.jsp',
  data: { *Needed data* },
  success: function(data) {
    $('#element').append(data);
  }
});

Vea también estas dos respuestas de StackOverflow:

contestado el 23 de mayo de 17 a las 13:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.