我无法获得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 :(得分:0)
它不起作用,因为post
是异步调用。当您致电my_f()
时,会致电post
,然后返回arr
,而无需等待post
完成。
答案 1 :(得分:0)
AJAX不能以这种方式工作。 $.post
向服务器发出异步请求,该服务几乎总是在>>之后完成调用它的函数。
这通常会下降。
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”的函数。
我希望这会对你有所帮助。