我们运行了一个JavaServlet,它为我们提供了所需的数据。问题是Jquery解释这些数据的方式。
通过响应编写器发送信息。 (例如:消息)
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);
}
通过Ajax请求获取信息
$.ajax({
type: 'POST',
url: 'message.jsp',
data: { *Needed data* },
success: function(data) {
$('#element').append(data);
}
});
这有时会起作用,有时却不起作用。所以我们在chrome中检查了控制台,让代码停在追加线上。当发送多个消息时,success函数中的'data'被解释为一个大字符串,
"<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>
"
但是当只发送一个message / div时,它被解释为'#document'对象。
#document
<div class="message" id="174" onclick="loadFullMessage(174)">…</div>
可以在chrome控制台中看到该消息,但是当附加以下错误时会遇到“未捕获的错误:HIERARCHY_REQUEST_ERR:DOM异常3”。
如何始终将数据解释为字符串而不是更改为文档对象?
答案 0 :(得分:3)
@boblail是对的 - 将dataType
更改为ajax
即可。但是,您有时会使用不会修改的第三方库。这是我的JQuery UI。
发送Content-Type: application/xhtml+xml
会导致JQuery在响应中构建DOM Document。将Content-Type
设置为text/html
即可。
答案 1 :(得分:1)
我刚刚在dataType
电话中添加了ajax
,解决了一个非常类似的问题:
$.ajax({
type: 'POST',
url: 'message.jsp',
data: { *Needed data* },
success: function(data) {
$('#element').append(data);
}
});
另请参阅这两个StackOverflow答案: