2014-11-02 6 views
1

Я использовал document.write(), чтобы заменить существующий html некоторыми загруженными AJAX.
Если используется один раз в нормальной нагрузке она отлично работает (по нормали я имею в виду без AJAX), но если используется более чем один раз, он пишет без замены существующего контентаDocument.write только перезаписывает страницу один раз

Другими словами, первый раз document.write() вызывается page1 , страница 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); 
    } 
} 

Page один:

<a href="#" onclick="loadXMLDoc('page2.html');">p1</a> 

Page два:

<a href="#" onclick="loadXMLDoc('page3.html');">p1</a> 

Page три:

<a href="#" onclick="loadXMLDoc('page1.html');">p1</a> 
+0

Можем ли мы увидеть код, пожалуйста? – Rippo

+1

Вам лучше использовать '$ (document) .html (...);' than 'document.write()' –

+2

Вы не должны использовать 'document.write' для подобных вещей. Или для любого материала. – YemSalat

ответ

2

Это ожидаемое поведение. Метод write используется для записи содержимого на страницу при его рендеринге.

Он заменяет только страницу, когда она используется после завершения страницы, потому что в первый раз, когда вы ее используете, она будет делать неявный document.open(), чтобы начать новый поток для записи.

Чтобы правильно его использовать, чтобы заменить страницу, вызовите document.open первыми, а затем использовать document.write один или несколько раз, чтобы записать содержимое, а затем вызвать document.close сообщить браузеру, что новая страница является полной.

1

Вызов document.close() после того как вы написали к нему после обновления AJAX.

Стоит отметить, что если вы заменяете весь документ с результатом АЯКСОМ ответа, это трудно понять, какое-либо преимущество внедрения этой сложности более просто размещение простого старый <form> или обход в <a> ссылки.

+0

Спасибо! Я использую 'document.write', потому что, когда я использую' document.body.innerHTML' для замены только тела (или какой-либо другой части), требуется время, чтобы все выглядело правильно. Похоже, браузер просматривает все перед глазами пользователя, и это не очень нравится – user3088260

+0

@ user3088260, и для перезагрузки всей страницы потребуется время. – Pointy

+0

Это не то, что я имею в виду, посмотрите на [this] (http://www.cryptolight.cf) и попробуйте нажать ссылку. тип страницы перестраивает себя странно .. – user3088260