从嵌套函数中获取值

时间:2013-03-15 18:24:18

标签: jquery

我无法获得arr的值。任何建议......

function my_f() {
    var arr;
    $.post('data.php', function(data) {
        arr = $.makeArray($("tr",data).map(function(){
            return $(this).attr("id");
        }).get());

        return false;
        //alert(arr); ...this work 
    });
    return arr;
}

alert(my_f()); //return undefined

5 个答案:

答案 0 :(得分:0)

它不起作用,因为post是异步调用。当您致电my_f()时,会致电post,然后返回arr,而无需等待post完成。

答案 1 :(得分:0)

AJAX不能以这种方式工作。 $.post向服务器发出异步请求,该服务几乎总是在>之后完成调用它的函数

这通常会下降。

  1. 输入功能
  2. 发送请求
  3. 退出函数(由于请求尚未完成,返回null)
  4. 请求完成(现在arr已设置,但为时已晚)

答案 2 :(得分:0)

您的方法存在多个问题。除了ajax没有按照您尝试使其工作的方式工作,您没有将arr设置为任何内容,并且在所有内容都已加载之前您的警报正在运行。如果您将警报包裹在$( //code to run )中,您将收到警告,表明arr与以下代码无关;

function my_f() {
  var arr = '';
  $.post('data.php', function(data) {
  arr = $.makeArray ($("tr",data).map(function(){return $(this).attr("id")}).get());
  return false;
  //alert(arr); ...this work 
});
return arr;
}

$(alert(my_f())); //return undefined

答案 3 :(得分:0)

问题是$ .post是异步的,所以当你尝试返回arr时,它还没有值。

尝试这样的事情:

function my_f(callback) {
    $.post('data.php', function(data) {
        var arr = $.makeArray($("tr",data).map(function(){
            return $(this).attr("id");
        }).get());
        callback(arr);
        return false;
    });
}

my_f(alert);

答案 4 :(得分:0)

在收到答案之前执行您的功能内容。

传递给post函数的函数是回调函数。回调函数是一个在收到响应时执行的函数。

此外,您的“回调”功能不是回调函数,因为它在调用post函数后执行,而不是在收到答案时执行。

另外,警告数组不会提供太多信息,请使用console.log()进行测试。

最后,您可以在回调函数中使用相关值(arr的值),而不是名为“callback”的函数。

我希望这会对你有所帮助。