繁体   English   中英

Document.write只覆盖一次页面

[英]Document.write only overwrites the page once

我一直在使用document.write()来替换现有的html和一些由AJAX加载的html。
如果每个正常负载使用一次它工作正常(通常我的意思是没有AJAX),但如果使用多次,它写入而不替换现有内容

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

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

全局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>

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

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

要正确使用它来替换页面,首先调用document.open ,然后使用document.write一次或多次编写内容,然后调用document.close告诉浏览器新页面已完成。

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

值得指出的是,如果你用ajax响应的结果替换整个文档,很难看到引入这种复杂性的任何优点,而不仅仅是发布一个简单的旧<form>或遍历一个<a>链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM