2012-04-24 126 views
0

我已經定義了一個JavaScript函數JavaScript函數返回一些價值

function a() 

{ 
    var data = 'some data'; 
    $.getJSON(networkController,data,function(r) { 
      $.each(r, function(a) 
      { 
       alert(r[a].networkAccessToken); 
     }); 
    }); 
} 

它工作正常,但是當我做它:

function a() 

{ 
    var data = 'some data'; 
    $.getJSON(networkController,data,function(r) { 
      $.each(r, function(a) 
      { 
       return r[a].networkAccessToken; 
     }); 
    }); 
} 
var c = a(); 
alert(c); 

警報是不確定.....

+1

再次檢查.....這是正確的語法 其他明智的給出總代碼 – 2012-04-24 06:02:07

+0

你是如何從數據庫中獲取值?你確定這個值是正確解析嗎? – 2012-04-24 06:02:55

+1

我們可以看到爲b設置值的代碼或它是什麼.. – Baz1nga 2012-04-24 06:05:28

回答

3

重要的是要認識到你的AJAX呼叫是非阻塞。這意味着它在返回之前收到來自服務器的響應。 (第一個「A」代表「異步」!)

來處理這種情況最常見的方法是使用一個callback

function a(callback) { 
    var data = 'some data'; 
    $.getJSON(networkController,data,function(r) { 
     $.each(r, function(a) { 
      callback(r[a].networkAccessToken); 
     }); 
    }); 
} 

a(function(c) { 
    alert(c); 
}); 
0

你有兩個問題。

首先,異步JavaScript和XML是異步的。當您撥打$.getJSON時,它會發送一個HTTP請求並註冊一個函數,以便在數據恢復時運行。然後在等待它的同時運行現有函數。

您有效地試圖做一些事情,如:

function a() { 
    $('button').click(function() { return 1; }); 
} 
foo = a(); // Would you expect this to be `1` and not `undefined`? 

其次,each調用每個值的函數。您傳遞給each的功能稱爲each而不是getJSONa。它的返回值僅僅確定循環是否應該繼續。

你需要做任何你想做的事在你傳遞給each的功能。您無法將數據傳回給調用鏈。你想要傳回的內容不再存在。

+0

那不行'return $。每個(r,function(){r}返回r [a] .networkAccessToken; });' – 2012-04-24 06:24:00