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 コンソールで確認できますが、追加すると「Uncaught Error: HIERARCHY_REQUEST_ERR: DOM Exception 3」というエラーが発生します。

データを常に文字列として解釈し、ドキュメント オブジェクトに変換しないようにするにはどうすればよいでしょうか?

4

2 に答える 2

3

@bobrailは正しいです - に変更dataTypeするとうまくいきajaxます。ただし、変更しないサードパーティのライブラリを使用する場合があります。私の場合は 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);
  }
});

次の 2 つの StackOverflow の回答も参照してください。

于 2012-07-20T16:18:59.320 に答える