我已经定义了一个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);
警报未定义.....
答案 0 :(得分: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);
});
答案 1 :(得分: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
而非getJSON
或a
调用。它的返回值只决定循环是否应该继续。
您需要在传递给each
的函数中执行任何想要执行的操作。您无法将数据传递回调用链。你想要传回的东西不再存在。