0

AJAX 呼び出しの結果としてエラーを表示する一般的な機能があります。これらのメッセージの一部は HTML 文字列です。これを DOM オブジェクトに変換し、.find() を使用してその中の要素を検索します。その他は単なる文字列 (HTML ではありません) になります。この場合、これを処理する方法がわかりません...例外が生成されています。

var messageTest = "" + this;
if ($(messageTest).length == 0) {
    message += this;
} else {
    message += $(messageTest).find('.message-error').html();
}

参考までに、この場合の「これ」は、各項目が文字である配列を持つ String オブジェクトのように見えるため、インスペクターでは「ここに私のメッセージ」は表示されませんが、

[0]: "m"
[1]: "y"

HTML ではない単なる文字列の場合、if ステートメントの行でエラーが発生します。

Uncaught Error: Syntax error, unrecognized expression:<The contents of messageText>

では、入力が HTML 文字列または単なる文字列である可能性がある場合、これを適切に処理するにはどうすればよいでしょうか?

注...最終的には、独自のHTMLでラップするため、文字列が必要です。

4

3 に答える 3

1

文字列または HTML の場合は、常に要素に追加して並べ替えることができます。

var msg = $('<div />').append(this),
    err = msg.find('.message-error'),
    txt = err.length ? err.text() : msg.text();

message += txt;

文字列または HTML を空の div に追加します。div に要素が含まれている場合は、.message-errorその要素のテキストを取得します。そうでない場合は、元の文字列と等しい div のテキストを取得します。

于 2013-07-31T22:54:43.383 に答える
0

あなたが持っているものに非常に近い1つの方法は、例外をキャッチすることです。この場合、それを文字列と見なします(this応答文字列が含まれていると仮定します):

var messageString = this;
var messageDOM;
try {
    messageDOM = $(messageString);
} catch(ex) {
    // If we got here, messageString is not HTML
    messageDOM = $('<div/>').text(messageString);
}   
于 2013-07-31T22:49:21.420 に答える
0

これがあなたの質問に答えていないことはわかっていますが、方法論を少し変更することで、あなたが望んでいることをよりよく達成できると思います.

これらの応答を送信するサーバーを制御できる場合は、それらを JSON オブジェクトとして送り返すことをお勧めします。すべての結果を JSON オブジェクトにする場合は、メッセージとともに返されるオブジェクトでエラー プロパティを true/false に設定できます。値を HTML またはエラー メッセージに置き換えます。

これは、javascript に対するネイティブ オブジェクトであり、jquery は $.getJSON を使用した優れた JSON サポートを備えているため、クライアント システムでも高速です。

于 2013-07-31T22:51:08.383 に答える