2015-09-24 56 views
0

我一直在試圖弄清楚如何使這項工作。Ajax將網站保存在加載中

var request; 

if(window.XMLHttpRequest){ 
    request= new XMLHttpRequest(); 
}else{ 
    request = new ActiveXObject("Microsoft.XMLHTTP"); 
} 


var handleStateChange = function() { 
    switch (request.readyState) { 
     case 0 : // UNINITIALIZED 
     case 1 : // LOADING 
     case 2 : // LOADED 
     case 3 : // INTERACTIVE 
     break; 
     case 4 : // COMPLETED 
     break; 
     default: alert("error"); 
    } 
} 


/*request.onreadystatechange=handleStateChange;*/ 
request.onreadystatechange = function(){ 
    if((request.status === 200) && (request.readyState === 4)){ 
     console.log(request); 
     document.writeln(request.responseText); 
    } 

} 
request.open('GET','data.txt'); 
request.send(); 

我在這裏找到了類似的問題在stackoverflow,但我還沒有想出爲什麼它的行爲(這是新的Ajax)。

所以問題是,當我有request.open('GET','data.txt');它導致頁面停留在加載模式和console.log沒有顯示任何東西。

我谷歌了一圈,發現在計算器這個解決方案request.onreadystatechange=handleStateChange;

這似乎是解決這個問題。不幸的是它覆蓋了request.onreadystatechange = function(){}。控制檯工作和data.txt內容不會顯示在網絡上。

如果我將它評論出來,內容會顯示在網絡上,但頁面會一直加載。

我認爲它與readyState有關,並且在達到4時responseText爲空。但我怎樣才能讓它顯示內容和console.log?

預先感謝您的寶貴時間:)

+0

@FrebinFrancis真的,爲什麼是好的,這XMLHttpRequest是壞?任何其他語法糖的原因。 – Jai

+0

@Metalbreath爲什麼你需要這個:'handleStateChange'。 – Jai

+0

看到使用Ajax助手時,您將獲得對XML http請求的很多控制權,因爲他們已經爲您完成了它。 –

回答

0

但它安慰的作品,但不顯示網站

按您的評論的任何結果,我可以建議你,你使用的是錯誤的方法。在javascript中沒有writeln方法,而是建議使用.write()(儘管不推薦)

改成這樣:

document.write(request.responseText); 

或更好:

document.body.innerHTML = request.responseText; // use this response contains html tags 

或:

document.body.textContent = request.responseText; // use this response is just text 
+0

這是一個很好的信息。謝謝。我甚至沒有注意到。 看來我的問題是由螢火蟲造成的。許多人得到這個問題。 現在有效。我希望它會保持這種方式:) – Metalbreath