2011-10-26 63 views
1

大家好,我已經得到了這一點的代碼,但它不斷踢出'未定義;

var projectID = $.getUrlVar('id'); 
var projectname; 

$.get('functions.php?func=projectname&id='+projectID, function(data) { 
    projectname = data; 
    alert(projectname+'<- see nice content'); 
}); 

alert(projectname+'<- no content :('); 

我該如何讓「projectname」在該函數之外可用?

(我確實注意到,實際運行該代碼時,沒有內容警報彈出之前,好內容。是.get頁面上運行的最後一件事?這就是爲什麼它的所有空白?coz變量犯規似乎還設置?

感謝

+0

建議您詳細閱讀規範,特別是'success'回調函數的部分,http://api.jquery.com/jQuery.get/ –

回答

5

AJAX異步運行(這就是第一AAJAX縮寫代表)。

所以,你必須爲你的問題的解決方案2:

  1. 不要試圖訪問該匿名函數之外的數據。完成所有的工作有(最佳解決方案)
  2. 更改$.get$.ajax並設置其async選項設置爲false(可怕的解決方案)
+3

您的第二點幾乎不值得一提,因爲擔心它會被使用:P – alex

+1

如果OP不知道異步方式,則在從服務器收到響應之前,不會執行第一個警報。同時,$ .get之後的其餘代碼繼續執行。也就是說,$ .get和第二個alert語句不會與其他任何_synchronized_因此它們是* a *同步的。 – erturne

2

這裏的問題是AJAX請求完成之前,你的第二個警報實際上執行。

的「A」,在「AJAX」代表異步。

任何功能nality依靠從一個AJAX請求返回的數據只應在實施或稱爲由success回調

+0

呵呵,關於'AJAX'縮寫性質的相同通知:-) – zerkms

0

因爲XHR是異步的,你不能這樣。

將所有代碼作爲後代函數處理,在調用堆棧的更深處,源自完整回調(其中projectname將具有指定的正確值)。

相關問題