2014-11-02 93 views
1

我一直在使用document.write()來替換現有的html,其中一些由AJAX加載。
如果按正常負荷使用一次,它工作正常(正常我的意思是沒有AJAX),但如果使用超過一次,將其寫入無需更換現有的內容Document.write只覆蓋頁面一次

換句話說,第一時間document.write()被稱爲在第1頁,第1頁將被覆蓋(如預期的那樣),但在下次調用時,新內容會追加至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> 
+0

我們可以看到一些代碼嗎? – Rippo 2014-11-02 15:10:39

+1

你最好使用'$(document).html(...);''document.write()' – 2014-11-02 15:11:22

+2

你不應該使用'document.write'這樣的東西。或者對於任何類型的東西真的。 – YemSalat 2014-11-02 15:11:23

回答

2

這是預期的行爲。 write方法用於在呈現內容時將內容寫入頁面。

它只會在頁面完成後纔會替換頁面,因爲第一次使用該頁面時,它會執行隱式的document.open()以啓動新的要寫入的流。

要使用它,適當地更換頁面,叫document.open第一,然後用document.write一次或多次寫的內容,然後調用document.close告訴新頁面完整瀏覽器。

1

呼叫你寫它下一個Ajax更新document.close()後。

值得指出的是,如果你使用的Ajax響應的結果替換整個文件,這是很難看到了張貼只是一個普通的老<form>或遍歷<a>鏈路引入這種複雜的任何優勢。

+0

謝謝!我正在使用'document.write',因爲當我使用'document.body.innerHTML'來替換主體(或其他部分)時,所有內容都需要時間才能看起來正確。它看起來像瀏覽器呈現在用戶眼前的一切,這不是令人愉快的 – user3088260 2014-11-02 15:21:16

+0

@ user3088260它也需要時間來重新加載整個頁面。 – Pointy 2014-11-02 15:22:29

+0

這不是我的意思,看看[this](http://www.cryptolight.cf)並嘗試點擊鏈接。頁面排序重新排列自己奇怪.. – user3088260 2014-11-02 15:27:48