Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.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.write只覆盖页面一次_Javascript_Html_Ajax - Fatal编程技术网

Javascript Document.write只覆盖页面一次

Javascript Document.write只覆盖页面一次,javascript,html,ajax,Javascript,Html,Ajax,我一直在使用document.write()用AJAX加载的html替换现有html。 如果每次正常加载使用一次,它就可以正常工作(正常情况下,我指的是没有AJAX),但是如果多次使用,它就可以在不替换现有内容的情况下进行写入 换句话说,第一次在第1页调用document.write(),第1页将被覆盖(按预期),但下一次调用时,新内容将添加到第1页。为什么? 下面是一些代码来重现我的问题: 全局JavaScript(在所有页面上): 第一页: 第二页: 第三页: 在ajax更

我一直在使用
document.write()
用AJAX加载的html替换现有html。
如果每次正常加载使用一次,它就可以正常工作(正常情况下,我指的是没有AJAX),但是如果多次使用,它就可以在不替换现有内容的情况下进行写入

换句话说,第一次在第1页调用
document.write()
,第1页将被覆盖(按预期),但下一次调用时,新内容将添加到第1页。为什么?

下面是一些代码来重现我的问题:

全局JavaScript(在所有页面上):

第一页:


第二页:


第三页:


在ajax更新后写入文档后,调用
document.close()


值得指出的是,如果用ajax响应的结果替换整个文档,很难看出引入这种复杂性比简单地发布一个普通的
或遍历
链接有什么好处。

这是预期的行为。
write
方法用于在页面呈现时将内容写入页面

它仅在页面完成后使用页面时替换页面,因为第一次使用它时,它将执行隐式
document.open()
,以启动要写入的新流


要正确使用它来替换页面,请调用
文档。首先打开
,然后使用
文档。编写
一次或多次来编写内容,然后调用
文档。关闭
以告知浏览器新页面已完成。

我们可以看到一些代码吗?您最好使用
$(文档).html(…)
大于
document.write()
您不应该使用
document.write
来处理类似的东西。或者任何类型的内容。正如您在回答中提到的,您需要使用document.close()来完成文档。write()但是document.write永远不能与脚本在同一个窗口中使用,除非它是内联的,并且在页面完成加载之后,因为它会擦除它所在的页面。谢谢!我使用的是
document.write
,因为当我使用
document.body.innerHTML
仅替换body(或其他部分)时,一切都需要时间才能正常运行。看起来浏览器正在呈现用户眼前的一切,而这还不到一半-pleasant@user3088260重新加载整个页面也需要时间。这不是我的意思,请查看并尝试单击链接。页面的排列有点奇怪。@user3088260当您只需要更新页面的最小部分时,ajax的优势就实现了。如果要更新整个页面,最好使用简单的链接或表单,因为它们就是这样做的——替换整个页面。JavaScript呢?如果我使用
innerHTML
javascript将无法正确执行?
function loadXMLDoc(name) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.addEventListener("load", transferComplete, false);
    xmlhttp.open("GET", name, true);
    xmlhttp.send();
    function transferComplete() {
        document.write(xmlhttp.responseText);
        history.replaceState(null, null, name);
    }
}
<a href="#" onclick="loadXMLDoc('page2.html');">p1</a>
<a href="#" onclick="loadXMLDoc('page3.html');">p1</a>
<a href="#" onclick="loadXMLDoc('page1.html');">p1</a>