2009-11-10 49 views
1

在下面的jquery函數中,有人可以向我解釋爲什麼「第二個」在「first」之前執行?我假設整個$ .post請求應該在瀏覽器移動到下一行代碼之前完成,但似乎並沒有發生。

function getGUID() { 
$.post(getGUIDScript, function(data, textStatus) { 
    alert("first"); 
    GUID = data; 
    }, 
    'text'); 

    alert("second");   
} 

感謝您對下面的回覆。爲了後人的緣故,上面的代碼可以寫成如下所示,等到帖子完成後再繼續。

function getGUID() { 
$.ajax({ 
type: "POST", 
url: getGUIDScript, 
async: false, 
success: function(data) { 
    alert("first"); 
    GUID = data; 
} 
}); 
    alert("second"); 
} 

這將引發第一次警報,然後第二次。

回答

4

該帖子是異步完成的,因此以下語句在第一個語句完成之前執行。如果您需要它們是同步的,則需要使用$ .ajax並將async參數設置爲false。更好的是,使用回調機制來等待並在帖子完成的ajax調用完成後執行後續操作。

+0

任何方法讓它等待它完成?我在$ .post完成之前從函數返回。 – 2009-11-10 01:49:59

+0

我能想到的唯一方法是將執行腳本的其餘部分作爲POST的回調。 – 2009-11-10 01:51:12

+0

查看我的更新。最好的方法是將一個函數傳遞給你的函數,作爲該帖子的回調函數執行。 – tvanfosson 2009-11-10 01:51:23

3

$.post()初始化一個將回調作爲參數的異步POST請求。當服務器返回對POST請求的響應時,執行回調。