2014-07-08 53 views
0

遵循其他文檔,我已成功打印出按行分隔的文本文件。解釋document.getelementbyid.innerhtml如何打印文本

<!DOCTYPE html> 
<html> 
<head> 
<script> 
function readFile() 
{ 
    var xmlhttp; 
    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      document.getElementById("myDiv").innerHTML=xmlhttp.responseText.split("\n"); 
     } 
    } 

    xmlhttp.open("GET","OFCaddresses.txt",true); 
    xmlhttp.send(); 
} 
</script> 
</head> 
<body> 

<div id="myDiv"><h2>"FILE.txt"</h2></div> 
<button type="button" onclick="readFile()">FILE</button> 

</body> 
</html> 

我想更好地理解這是如何工作的,如果有人能解釋。據我所知,他們依賴於瀏覽器xmlhttp如何界定,但到底是什麼

document.getElementById("myDiv").innerHTML=xmlhttp.responseText.split("\n"); 

實際上呢?它是否將myDiv的內容從文本更改爲文件內容? onreadystatechange與按鈕有什麼關係?

+0

將響應中的行顯示爲逗號分隔的字符串;這是你真正想要的嗎? –

回答

2

看來您需要做更多的關於javascript的工作原理和工作原理。

xmlhttp.onreadystatechange=function()正在爲xmlhttp對象分配一個函數,該對象在readystate更改時將執行。這意味着當對象經歷了請求數據的各個階段時,它將多次執行此功能。

在這一功能,您有一張支票:if (xmlhttp.readyState==4 && xmlhttp.status==200)

這是說,如果readyState爲4(完成 - 見here對readystates更多信息)然後繼續{}塊內執行的一切。

最後,你有這樣的代碼

document.getElementById("myDiv").innerHTML=xmlhttp.responseText.split("\n"); 

這是使用document對象持有的所有頁面上的HTML。 getElementById方法在html對象中搜索具有給定標識的項目。您已獲得以下html

<div id="myDiv"><h2>"FILE.txt"</h2></div> 

因此document.getElementById("myDiv")找到此div。 innerHTML屬性返回該div的html,它當前是您的<h2>標頭。

xmlhttp.responseText.split("\n");從您的xmlhttp對象獲取響應,並將其拆分爲數組,並將其設置爲新值innerHTML對象。當數組以html格式打印時,以逗號分隔。

希望這會給你一個更好的理解。但這些都是非常基本的JavaScript命令,所以你有很多學習要走。

0
document.getElementById("myDiv") 

訪問ID爲myDiv的元素。

document.getElementById("myDiv").innerHTML 

接入元件的innerHTML與ID myDiv

xmlhttp.responseText 

得到XMLHTTP響應的主體(相對於頭部或與響應一起發送的其他信息)

xmlhttp.responseText.split("/n") 

將響應拆分爲一個數組,分隔符是換行符。

document.getElementById("myDiv").innerHTML=xmlhttp.responseText.split("\n"); 

替換一切是在元件內部id爲myDiv與響應文本,改變成新行逗號(因爲陣列中,當作爲字符串進行處理,將使用逗號分隔陣列值)。

注意:一個AJAX請求(這就是整個xmlhttpRequest的全部內容)是異步的,也就是說,它會在正在運行的代碼的正常過程之外發生。所以,你需要一種方法來使用這些信息,一旦你得到迴應。 onreadystatechange是從服務器收到響應(成功或失敗)時將解決的事件。這就是爲什麼該功能進一步試圖找出readyStatestatus:確保響應成功。如果您的網絡連接速度較慢,或者服務器距離較遠,您會發現異步部分比在您自己的計算機上發生的情況更明顯:解決此問題可能需要一兩秒鐘。