2011-05-25 27 views
0

爲什麼不能正常工作?jQuery ajax數據可用性

var myData; 

function getData() 
{ 
    $.ajax(
     { 
      url: dataURL, 
      success: function(data) 
      { 
       myData = data; 
      } 
     } 
    ); 
} 

getData(); 
console.log(myData); 

我正確作用域變量,但我不能使用功能之外的數據..

+0

可有人請編輯答案使用「異步:假」,因爲這是解決 – 2011-05-25 21:37:25

+0

我建議你不要使用'異步:FALSE'。使用它可以使瀏覽器鎖定,直到AJAX調用完成。最好讓它在後臺運行,並在其準備就緒時運行回調。 – 2011-05-25 21:52:14

+0

我明白它的作用,對於這種情況它是正確的解決方案。我會繼續發佈答案,除非你想發佈並獲得積分。 – 2011-05-26 17:00:46

回答

3

AJAX是異步的。它在代碼運行時在後臺運行。所以,當你打電話給console.log(myData);時,AJAX調用還沒有完成,所以變量沒有設置。

您應該使用回調函數來處理數據,就像這樣:

function getData(){ 
    $.ajax({ 
     url: dataURL, 
     success: function(data){ 
      console.log(data); 
     } 
    }); 
} 

getData(); 
2

AJAX異步工作(你可以把它是同步的,但通常那不是你想要的)。這意味着您定義的成功回調僅在響應來自服務器後觸發。將日誌語句放入成功回調中。

0

使用async: false

var myData; 

function getData() 
{ 
    $.ajax(
     { 
      url: dataURL, 
      async: false, 
      success: function(data) 
      { 
       myData = data; 
      } 
     } 
    ); 
} 

getData(); 
console.log(myData);