我一直在使用document.write()
将现有的html替换为一些由AJAX加载的html
如果每次正常加载使用一次它工作正常(通常我的意思是没有AJAX),但如果多次使用,它会在不替换现有内容的情况下写入
换句话说,第1页上第一次调用document.write()
时,第1页被覆盖(按预期),但下次调用时,新内容追加到第1页。为什么呢?
这里有一些代码可以重现我的问题:
全球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>
答案 0 :(得分:2)
这是预期的行为。 write
方法用于在呈现内容时将内容写入页面。
它仅在页面完成后使用时替换页面,因为第一次使用它时,它将执行隐式document.open()
以启动要写入的新流。 / p>
要正确使用它来替换页面,请先调用document.open
,然后使用document.write
一次或多次编写内容,然后调用document.close
告诉浏览器新的内容页面已完成。
答案 1 :(得分:1)
在ajax更新后写入document.close()
后调用{。}}。
值得指出的是,如果你用ajax响应的结果替换整个文档,很难看出引入这种复杂性的任何好处,而不仅仅是发布一个普通的<form>
或遍历一个{{ 1}}链接。