Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript document.open异步?_Javascript_Document_Ready - Fatal编程技术网

Javascript document.open异步?

Javascript document.open异步?,javascript,document,ready,Javascript,Document,Ready,因此,在我的站点上有一个Javascript函数,它将通过XMLHttpRequest从服务器加载一个新站点。之后,它将用新页面替换当前页面: var post = new XMLHttpRequest(); post.open('POST', data); post.onload = function() { var do = document.open("text/html", "replace"); do.write(post.responseText); do.c

因此,在我的站点上有一个Javascript函数,它将通过XMLHttpRequest从服务器加载一个新站点。之后,它将用新页面替换当前页面:

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()之后,文档已经更改并准备就绪。但事实并非如此,例如,如果我加载了很多/big data/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')后立即显示所有图像……

您是否尝试将就绪事件附加到文档中,您可以尝试以下操作

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'));
}
编辑:

是的,我在fiddler上试过,但有JS事件,如下面和

var docx=document.open();
docx.onreadystatechange=函数(){alert(this.readyState)};
警报(docx);
文件写作(“测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试;
docx.close();​
之后,只需检查就绪状态,并在其
完成时执行操作


我想这个就可以了。

N.B.:
do
在JavaScript中是一个保留字。是的,我实际上缩短了代码的变量名以保持clarity@AlexSchneider嗨,我添加了另一个解决方案,这一次起作用了。只需将另一个留给未来参考。哦,我不知道事件浏览器的兼容性,所以这取决于您。
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();​