1

したがって、私のサイトには、XMLHttpRequest を介してサーバーから新しいサイトをロードする Javascript 関数があります。その後、現在のページを新しいページに置き換えます。

var post = new XMLHttpRequest();
post.open('POST', data);
post.onload = function() {
    var do = document.open("text/html", "replace");
    do.write(post.responseText);
    do.close();
    goOn();
}

function goOn() {
    console.log($('img:visible'));
}

do.close() の後、ドキュメントが変更され、準備ができていると想定する人もいます。しかし、そうではありません。たとえば、大量/ビッグデータ/responseText をロードすると、関数 goOn() は空の結果のみをログに記録します。その場合、明らかに goOn() は、DOM を読み取る準備ができる前に呼び出されます。残念ながら、write() が終了した後に発生する「準備完了」イベントはありません..終了したことを確認するにはどうすればよいですか?

/編集: goOn() はこれを Chrome コンソールに記録します:

[prevObject: p.fn.p.init[1], context: #document, selector: "img:visible"]
context: #document
length: 0
prevObject: p.fn.p.init[1]
selector: "img:visible"
__proto__: Object[0]

しかし、その直後に手動でコンソールに $('img:visible') と入力すると、すべての画像が表示されます....

4

1 に答える 1

2

次のようなことを試すことができるドキュメントに準備完了イベントを添付しようとしましたか?

var post = new XMLHttpRequest();
post.open('POST', data);
post.onload = function() {
    var do = document.open("text/html", "replace");
    $(do).ready(function () { goOn(); });
    do.write(post.responseText);
    do.close();

}

function goOn() {
    console.log($('img:visible'));
}

編集:

はい、私はフィドラーを試しましたが、以下とここのようなJSイベントがあります

var docx = document.open();
docx.onreadystatechange = function () { alert(this.readyState) };
alert(docx);
docx.write("<div>test test test test ttetst <br /></div><div>test test test test ttetst <br /></div><div>test test test test ttetst <br /></div><div>test test test test ttetst <br /></div><div>test test test test ttetst <br /></div><div>test test test test ttetst <br /></div><div>test test test test ttetst <br /></div><div>test test test test ttetst <br /></div>");

docx.close();​

その後、準備ができている状態を確認し、準備が整ったら作業を行いますcomplete

これでうまくいくと思います。

于 2012-12-10T22:45:41.580 に答える