2012-08-09 83 views
-1

我在學習Ajax,我正在通過this example。這是做什麼的?我不明白語法variable = function(){如何將函數分配給變量?有人可以向我解釋這段JavaScript/Ajax代碼的一部分嗎?

xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
    } 
    } 
+1

Google「回調函數」 – asawyer 2012-08-09 18:16:19

+0

函數是java腳本中的頭等對象:http://stackoverflow.com/questions/705173/what-is-meant-by-first-class-object – 2012-08-09 18:19:22

回答

1

我知道每個人都在說這是一個回調專門,但你問的問題可以通過比較你感到困惑的一些更熟悉的代碼更好地回答。

function myFunction() 
{ 
    ... 
} 

因此我們知道調用myFunction()將運行該代碼。

在Javascript中,您可以通過多種方式聲明函數。這意味着:

var myFunction = function() 
{ 
    ... 
} 

是否與上述第一個示例完全相同。它創建一個函數,您可以使用myFunction()調用。

添加回調到你的問題混,我們可以看到,

xmlhttp.onreadystatechange = function() 
{ 
    ... 
} 

無非是分配功能,幷包含代碼的對象XMLHTTP的onreadystatechange屬性更多。這意味着每當xmlhttp對象發生狀態變化時,函數中的代碼都會被調用。

1

當readyState的變化,如果請求完成和響應準備就緒(readyState==4)和文件放置錯誤(HTTP狀態代碼200 = OK!),追加響應文本的元素id爲#txtHint


onreadystatechange存儲功能(或者功能的名稱)來自動每次readyState屬性更改被調用。

readyState保存XMLHttpRequest的狀態。從0到4的變化:

  • 0:請求未初始化
  • 1:服務器連接建立
  • 2:請求接收
  • 3:處理請求
  • 4:請求完成和響應準備好

status需要HTTP響應代碼:

  • 200: 「OK」
  • 404:找不到頁面
1

onreadystatechange是一個回調。它在特定事件發生時被觸發。在請求就緒狀態改變時發生onreadystate

總之onreadystate

Stores a function (or the reference of a function) to be called automatically each time the readyState property changes 

現在的行 xmlhttp.readyState==4 && xmlhttp.status==200

readyState : Holds the status of the XMLHttpRequest.

Changes from 0 to 4: 
0: request not initialized 
1: server connection established 
2: request received 
3: processing request 
4: request finished and response is ready 

而且status舉行狀態

200: "OK" 
404: Page not found 
當響應準備就緒,並且沒有問題

xmlhttp.responseText包含從服務器發送的響應

所以xmlhttp.readyState==4 && xmlhttp.status==200條件爲真。

因此document.getElementById("txtHint").innerHTML=xmlhttp.responseText;將ID爲txtHint的元素的HTML更改爲收到的響應。

希望以上所有的意義!

+0

我從來沒有能力瞭解回調。當特定事件發生時,'onreadystatechange'被觸發。這與回電有什麼關係? – Celeritas 2012-08-09 18:31:07

+0

特定事件發生時調用函數稱爲'callback'。現在有意義嗎? – 2012-08-09 18:33:29

+0

特定事件發生時,你的意思是什麼?通常調用一個函數不會被視爲回調權限。 – Celeritas 2012-08-09 19:42:41

1

我想解決這個評論:I've never been able to understand callbacks.

考慮這樣的比喻:

你需要想租那部電影剛出來的VHS,所以你 打電話Blockbuster和要求服務員如果他們有一份副本。可惜 雖然,他們是非常忙於處理數以千計的大衛鮑伊球迷 誰試圖租「迷宮」在同一時間,他沒有 有時間爲你查找信息。相反,他要求您的電話號碼爲 。在未來的某個時間點,當人們離開並且他有時間的時候,他會查找你需要的信息, ,然後回覆你提供的號碼。原來電影是 售罄,所以他建議「黑水晶」代替。

在你面對的是要花費很長的時間去做的工作,因爲它需要跟遠程服務器的實體的情況下,所以它基本上是問你要電話號碼,這樣,當它完成您會按照要求的數據回覆原樣。

它現在更有意義了嗎?

+0

很久以前,我討厭電腦的朋友和我一起上課。當他問老師一個關鍵(陣列中)時,她說:「這就像是公寓大樓中郵箱的鑰匙」。我不是通過類比/隱喻學習的巨大粉絲。當你說「你正在處理一個需要很長時間才能完成工作的實體時」有什麼關係?沒有什麼比這更好的了?沒有任何指示可以同時做到。 – Celeritas 2012-08-09 19:48:18

+1

@Celeritas只是因爲這是你的具體例子的原因並不意味着這是一般情況。考慮這個 - Javascript是單線程的。如果你做了一個可能需要3秒的ajax調用,(完全合理),你將完全鎖定頁面上的任何其他腳本,並在此期間終止所有用戶交互。仍然認爲沒有指示要同時運行? – asawyer 2012-08-09 19:51:24

+0

@Celeritas此外,老師的比喻並不是很好,除了數組索引不是鍵。 – asawyer 2012-08-09 19:55:41

相關問題