Cadena HTML de JavaServlet interpretada como #document en Javascript en lugar de cadena
Frecuentes
Visto 472 veces
1
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?
2 Respuestas
3
@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
1
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 jquery or haz tu propia pregunta.
Resuelto agregando "tipo de datos: 'html'" a la solicitud de ajax... - Peter Raeves