2017-03-07 24 views
0

使用W3School例子(https://www.w3schools.com/js/js_ajax_intro.asp):設置innerHTML後的AJAX:GET請求?

<!DOCTYPE html> 
<html> 
<body> 

<div id="demo"> 
<h1>The XMLHttpRequest Object</h1> 
<button type="button" onclick="loadDoc()">Change Content</button> 
</div> 

<script> 
function loadDoc() { 
    var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
     document.getElementById("demo").innerHTML = 
     this.responseText; 
    } 
    }; 
    xhttp.open("GET", "ajax_info.txt", true); 
    xhttp.send(); 
} 
</script> 

</body> 
</html> 

有人可以解釋爲什麼的innerHTML設置後發生的GET動作?

從邏輯上講,我習慣於從上到下進行的語言,逐步處理每行代碼。

當我讀這是第一次,我假設的innerHTML爲演示元素將是空白,那有沒有作用,這重新設置innerHTML來從結果ajax_info.txt繼服務器請求。這在後端語言思維,一直是可變的innerHTML,那就要進行更新,最後聲明可能會出現這樣的:

document.getElementById("demo").innerHTML = 
      this.responseText; 

例使用僞變量:

  1. var x =''或NULL;
  2. var y =從服務器上的文件獲取文本;
  3. var x = y;
+0

這是因爲你將賦值給'onreadystatechange'函數,這個函數將在稍後的響應到達時執行,然而解釋器繼續執行剩餘的代碼。閱讀關於異步JS –

+0

完美。我會看一看。謝謝您的幫助! –

+0

@Maximus解釋器按原樣'執行'代碼,它恰好是代碼是一個函數聲明。 – pvg

回答

0

onreadystatechange是一個監聽器,它不是直接執行,而是監聽該事件的XHR請求。

當事件被觸發時,例如當響應從服務器返回時,代碼將被執行。

-1

在JavaScript中,不能保證每個代碼都會一個接一個地執行。如果某條線需要時間,則第二條線開始運動。因此,如果需要某些執行優先級,則需要應用回調。對於Ajax的情況,請遵循同步或異步方式。

0

您還可以兌換xhttp.onreadystatechangexhttp.open()的訂單。

該請求將僅在轉移xhttp.send()後發送到服務器

而且在xhttp.onreadystatechange=function(){}你可以找到

if (this.readyState == 4 && this.status == 200){ // dom excution }

這意味着DOM excution xhttp.send()後,將請求發送到服務器和readyState==4 &&status==200