2012-04-24 72 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