我正在尝试使用$ .post检索数据并将其存储为返回类型。但是,我总是得到一个未定义的错误。
如果我这样做:
function get_list(){
$.post('php/reverse.php', function(data){
alert(data);
});
}
一切都很完美。但是,如果我做了像
这样的事情 function get_list(){
$.post('php/reverse.php', function(data){
return data;
});
}
alert(get_list());
然后它突然给我一个未定义的错误。有人能告诉我我做错了什么。
答案 0 :(得分:4)
您无法在异步上下文中返回此类数据...
你必须通过一些成功执行的回调:
function get_image_list(handler){
$.post('php/reverse.php', function(data){
handler(data);
});
}
get_image_list(function(data){alert(data);});
答案 1 :(得分:1)
你的get_image_list实际上并没有返回任何内容,因为它不包含return语句。 AJAX调用是异步执行的。为了使您的代码段按预期工作,它必须看起来像:
function get_image_list(callback) {
$.post('php/reverse.php', function(data){
callback(data);
});
}
get_image_list(function(data) { alert(data); });
答案 2 :(得分:0)
这是因为AJAX的asynchronous
性质。您无法从回调函数返回值,因为在AJAX调用触发回调时,所有其他代码都已执行很长时间。
答案 3 :(得分:0)
这不太理想,但似乎你还不熟悉异步调用。请调查回调。 话虽如此,这是您正在寻找的代码:
function getList(){
var dataToReturn;
$.ajax({
url: "php/reverse.php",
async: false
}).done(function(data){
dataToReturn = data;
});
return dataToReturn;
}
alert(getList());
通过将async设置为false,您强制代码等待数据准备好使用。这样你就可以分配给'dataToReturn',并在函数执行结束时返回它。默认情况下,async为true,因此在数据准备好之前执行到达函数的末尾,因此没有任何内容可以返回。