2011-11-04 82 views
0

看我的代碼:全局變量無法獲取ajax成功函數內的值

我正在使用Jamal框架。

Event: { 
     getEvents: function(){ 
      var events; 

      $.ajax({ 
       type: "POST", 
       url: anchor("Events/getEvents"), 
       success: function(data) { 
        if(data){ 
         events = data; 
         console.log(events); 
        } 
       } 
      }); 

      console.log(events); 
      return events; 
     } 
    } 

第一輸出是:

{"0":{"id":"1","title":"title","description":"comment"},"1":{"id":"2","title":"title2","description":"comment2"}} 

第二輸出: 未定義

如果VAR的事件是全球,爲什麼不能我設置了AJAX功能內的價值和獲得的價值後?

賈馬爾打破了什麼?

+0

你確定第二個電話有效嗎?如果你沒有通過你的成功函數,'事件'永遠不會被分配。 – AlG

回答

5

這是因爲變量:

var events; 

在回調函數初始化 - AJAX調用是異步的,如果你把:

console.log(events); 

右Ajax調用變量沒有被分配(它會somtime - 但你不知道什麼時候) - 所有的邏輯都需要回調。

你也可以通過設置:async : false使ajax調用同步,那麼你的代碼應該按預期工作。

0

這是因爲您傳遞給ajax()的函數是異步的。因此執行到達調用成功函數前的console.log()的底部調用。當服務器響應您的AJAX請求時,會調用成功函數。