0

我已经定义了一个 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);

警报未定义......

4

2 回答 2

3

重要的是要意识到您的 AJAX 调用是非阻塞的。这意味着它在从服务器接收到响应之前返回。(第一个“A”代表“异步”!)

处理此问题的最常见方法是使用回调

 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);
 });
于 2012-04-24T06:15:00.440 回答
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为每个值调用一个函数。您传递给的函数eacheachnotgetJSON或调用a。它的返回值只决定循环是否应该继续。

您需要在传递给的函数each中做任何您想做的事情。您不能将数据传回调用链。你想传回的东西已经不存在了。

于 2012-04-24T06:19:29.903 回答