2012-10-22 209 views
0

爲什麼這不起作用?Console.log返回'undefined'

var names; 

$.ajax({ 
    type : 'POST', 
    url : postUrl+"/admin/returnUserJSON", 
    success : function(data){ 
      names = data; 
    } 
}); 

console.log(names); 

問題: CONSOLE.LOG被返回undefined。

+1

把'console.log(names);'放在'success'回調中。記住:AJAX代表[**異步** JavaScript和XML](http://en.wikipedia.org/wiki/Asynchronous_I/O) – MilkyWayJoe

+0

只是確保成功被稱爲.. – insomiac

+1

這種類型的問題被問到每週至少五次。 – ahren

回答

5

作爲$.ajax呼叫是異步的,console.log將前names=data線將被執行被稱爲(因爲它是$.ajax回調函數,這將僅在服務器的響應之後調用的一部分)。因此它會輸出undefined

你能解決這個問題有兩種方式:要麼你的輸出進入回調函數...

function(data){ 
    names = data; 
    console.log(names); 
} 

...或使用無極接口:

$.ajax({ 
    type : 'POST', 
    url : postUrl+"/admin/returnUserJSON", 
    success : function(data){ 
      names = data; 
    } 
}).then(function() { console.log(names); }); 
2

你需要移動您的console.log到success處理程序。

success : function(data){ 
     names = data; 
     console.log(names); 
} 
2

在執行console.log時,您的AJAX請求尚未完成觸發。

如果您將console.log移至success回調,您將正確獲取數據。

var names; 

$.ajax({ 
    type : 'POST', 
    url : postUrl+"/admin/returnUserJSON", 
    success : function(data){ 
      names = data; 
      console.log(names); 
    } 
}); 

我建議您閱讀asynchronous javascript programming

1

AJAX請求在頁面已經被加載後觸發,所以這就是爲什麼你會得到錯誤。當您將變量輸出到控制檯時,該變量不存在。