2010-03-31 86 views
3

我不知道是否有人能幫助我理解一些異步JavaScript概念...如何ansynchronous方法的工作

說我做的非同步AJAX調用就像這樣:

xmlhttp=new XMLHttpRequest(); 
    xmlhttp.onreadystatechange= myFoo; 
    xmlhttp.open("GET",url,true); 

這裏是我的回調功能:

function myFoo() 
{ 
if (xmlhttp.readyState==4) 
    { 
    if (xmlhttp.status==200) 
    { 
    // Success message 
    } 
    else 
    { 
    // some error message 
    } 
    } 
} 

現在, 執行路徑何時再次啓動?一旦我調用open(),執行繼續直接在open()之下繼續,另一個「線程」在ajax請求完成後進入異步函數?

或者,瀏覽器是否等待請求完成,進行異步調用,然後在打開後繼續執行?

謝謝!

回答

1

首先,您錯過了xmlhttp.send調用。

瀏覽器沒有等待打開後繼續完成的請求。這是整個想法拋出一個異步調用。

+0

是的,我意識到......我想在其他語言中對我更有意義,因爲異步調用通常是作爲另一個線程進入的...所以我想我們有多線程的JavaScript? – Polaris878 2010-03-31 22:47:08

+1

不,JavaScript不是多線程的。工人API是最新的一個,允許對規則進行修改,但它是相當新的。 若要將您的頭圍繞在響應回來時發生的情況,請閱讀以下鏈接:http://www.javascriptkata.com/2007/06/12/ajax-javascript-and-threads-the-final-truth/ – Rajat 2010-03-31 23:17:41

+0

我顯然不太熟悉異步的方式大聲笑...感謝您的鏈接 – Polaris878 2010-03-31 23:20:42