0

我只是无法获得 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
4

5 回答 5

0

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

于 2013-03-15T18:26:52.253 回答
0

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

这就是它通常下降的方式。

  1. 输入功能
  2. 发送请求
  3. 退出函数(返回 null,因为请求尚未完成)
  4. 请求完成(现在arr已设置,但为时已晚)
于 2013-03-15T18:27:38.150 回答
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
于 2013-03-15T18:30:22.487 回答
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);
于 2013-03-15T18:30:38.140 回答
0

您的函数的内容在收到答案之前执行。

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

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

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

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

我希望这可以帮助你。

于 2013-03-15T18:48:53.153 回答