来自JavaServlet的HTML字符串在Javascript中解释为#document而不是字符串

时间:2012-05-22 14:39:57

标签: jquery

我们运行了一个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”。

如何始终将数据解释为字符串而不是更改为文档对象?

2 个答案:

答案 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答案: