JavaScript函数返回一些值

时间:2012-04-24 05:56:58

标签: function 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);

警报未定义.....

2 个答案:

答案 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而非getJSONa调用。它的返回值只决定循环是否应该继续。

您需要在传递给each 的函数中执行任何想要执行的操作。您无法将数据传递回调用链。你想要传回的东西不再存在。