2013-03-15 72 views
0

我只是無法獲得arr的值。任何建議...從嵌套函數獲取值

function my_f() { 
    var arr; 
    $.post('data.php', function(data) { 
     arr = $.makeArray($("tr",data).map(function(){ 
      return $(this).attr("id"); 
     }).get()); 

     return false; 
     //alert(arr); ...this work 
    }); 
    return arr; 
} 

alert(my_f()); //return undefined 
+1

AJAX調用是異步的。閱讀它。 – 2013-03-15 18:26:19

+1

AJAX是*異步*。您不能從AJAX調用返回值。所有工作都需要在回調中完成。 – 2013-03-15 18:26:41

+0

問題在於,在完成帖子並分配您真正想要的有趣值之前,該值會被返回並「收到警報」。 – 2013-03-15 18:26:42

回答

0

代碼的問題是,$。員額是異步的,所以當你試圖返回編曲,它還沒有價值。

嘗試這樣:

function my_f(callback) { 
    $.post('data.php', function(data) { 
     var arr = $.makeArray($("tr",data).map(function(){ 
      return $(this).attr("id"); 
     }).get()); 
     callback(arr); 
     return false; 
    }); 
} 

my_f(alert); 
+0

謝謝...這是工作...警報數據,但現在把數據放在一些var? – 2013-03-15 18:55:14

+0

它已經存在於名爲「arr」的變量中。你應該在你的回調函數中做任何你需要做的事情。另外,如果答案解決了您的問題,您可以接受它。如果這是最有用的答案,請接受它,所以此頁面的未來訪問者將立即知道哪個答案解決了他們的問題。 – 2013-03-15 19:28:50

+0

好的...我做到了...但我不知道現在如何將數據聯合到var'name' 這是代碼 $ .post('data.php','name ='+ //函數(數據){... – 2013-03-15 20:00:06

0

它不會起作用,因爲post是一個異步調用。當您致電my_f()時,它會呼叫post,然後返回arr而不必等待post完成。

0

AJAX不能這樣工作。 $.post向服務器發出一個異步請求,幾乎總是要在之後調用它的函數返回

這是它通常如何下降。

  1. 進入功能
  2. 發送請求
  3. 退出功能(返回null,因爲該請求尚未完成)
  4. 請求完成(現arr設置,但爲時已晚)
0

你的方法有很多問題。除了阿賈克斯沒有工作的方式,你試圖使它的工作,你不是設置arr任何事情,你的警報正在加載之前,一切都運行。如果您在$(//code to run)包裝你的警告,你會得到顯示出ARR警報等於沒什麼用下面

function my_f() { 
    var arr = ''; 
    $.post('data.php', function(data) { 
    arr = $.makeArray ($("tr",data).map(function(){return $(this).attr("id")}).get()); 
    return false; 
    //alert(arr); ...this work 
}); 
return arr; 
} 

$(alert(my_f())); //return undefined 
0

收到答案之前執行你的函數的內容。

您傳遞給帖子功能的功能是您的回調函數。回調函數是一個函數,當您收到響應時會執行該函數。

此外,您的「回調」函數不是回調函數,因爲它在調用post函數後執行,而不是在收到答案時執行。

此外,警報數組不會給你太多的信息,請使用console.log()進行測試。

最後,您可以在回調函數中使用相關值(arr的值),而不是稱爲「回調」的函數。

我希望這可以幫助你。