1

我们有一个 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 中检查了控制台,让代码停在附加行。当发送多条消息时,成功函数中的“数据”被解释为一个大字符串,

"<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>
"

但是当仅发送 1 条消息/div 时,它会被解释为“#document”对象。

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

可以在 chrome 控制台中看到该消息可用,但是在附加以下错误时遇到“未捕获错误:HIERARCHY_REQUEST_ERR:DOM 异常 3”。

数据如何总是被解释为字符串而不变成文档对象?

4

2 回答 2

3

@boblail 是对的 - 更改dataTypeajax会成功。但是,您有时会使用您不打算修改的第三方库。就我而言,它是 JQuery UI。

发送Content-Type: application/xhtml+xml会导致 JQuery 从响应中构建一个 DOM 文档。设置你Content-Typetext/html,你很好。

于 2012-11-19T10:44:48.733 回答
1

我刚刚通过添加调用解决了一个非常相似的dataType问题ajax

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

另请参阅这两个 StackOverflow 答案:

于 2012-07-20T16:18:59.320 回答