2013-03-15 95 views
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 
+1

AJAX调用是异步的。阅读它。 – 2013-03-15 18:26:19

+1

AJAX是*异步*。您不能从AJAX调用返回值。所有工作都需要在回调中完成。 – 2013-03-15 18:26:41

+0

问题在于,在完成帖子并分配您真正想要的有趣值之前,该值会被返回并“收到警报”。 – 2013-03-15 18:26:42

回答

0

代码的问题是,$。员额是异步的,所以当你试图返回编曲,它还没有价值。

尝试这样:

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); 
+0

谢谢...这是工作...警报数据,但现在把数据放在一些var? – 2013-03-15 18:55:14

+0

它已经存在于名为“arr”的变量中。你应该在你的回调函数中做任何你需要做的事情。另外,如果答案解决了您的问题,您可以接受它。如果这是最有用的答案,请接受它,所以此页面的未来访问者将立即知道哪个答案解决了他们的问题。 – 2013-03-15 19:28:50

+0

好的...我做到了...但我不知道现在如何将数据联合到var'name' 这是代码 $ .post('data.php','name ='+ //函数(数据){... – 2013-03-15 20:00:06

0

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

0

AJAX不能这样工作。 $.post向服务器发出一个异步请求,几乎总是要在之后调用它的函数返回

这是它通常如何下降。

  1. 进入功能
  2. 发送请求
  3. 退出功能(返回null,因为该请求尚未完成)
  4. 请求完成(现arr设置,但为时已晚)
0

你的方法有很多问题。除了阿贾克斯没有工作的方式,你试图使它的工作,你不是设置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 
0

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

您传递给帖子功能的功能是您的回调函数。回调函数是一个函数,当您收到响应时会执行该函数。

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

此外,警报数组不会给你太多的信息,请使用console.log()进行测试。

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

我希望这可以帮助你。