我正在尝试将ajax success数组从一个函数返回到另一个函数。出于某种原因,我似乎无法将存储在ajax函数成功部分的变量中的数据传递给父函数来返回。
我看了看这篇文章试图解决问题,但没有这样的运气: jQuery Ajax call - Set variable value on success
非常感谢您的帮助。
以下是代码的简化版本:
// make json_to_return global
var json_to_return;
function loop_through_data(){
// call the load_days function and put its array data into days_array
var days_data = load_days(03,2010);
// I'd like to be able to iterate through days_data here
//
//
}
function load_days(selectedMonth, selectedYear){
$.ajax({
type: "POST",
dataType: "json",
url: "../includes/get_availability.php",
data: "month=" + selectedMonth + "&year=" + selectedYear,
success: function(available_json){
json_to_return = available_json;
},
error: function(msg){
alert("error " + msg);
}
});
return json_to_return;
}
答案 0 :(得分:6)
这部分功能发生在以后:
success: function(available_json){
json_to_return = available_json;
}
因此,您返回的变量是未定义的,因为设置它的代码在响应从服务器返回之前不会发生。要么调用其余的代码来运行你的成功函数,所以它会在数据准备就绪时运行,或者设置async:false
(因为它锁定浏览器而不太理想)。
async: false
方法是这样的:
$.ajax({
type: "POST",
async: false,
dataType: "json",
url: "../includes/get_availability.php",
data: "month=" + selectedMonth + "&year=" + selectedYear,
success: function(available_json){
json_to_return = available_json;
},
error: function(msg){
alert("error " + msg);
}
});
更好的方法:
$.ajax({
type: "POST",
dataType: "json",
url: "../includes/get_availability.php",
data: "month=" + selectedMonth + "&year=" + selectedYear,
success: function(available_json){
loopThroughTheDaysAndDoStuff(available_json);
},
error: function(msg){
alert("error " + msg);
}
});
答案 1 :(得分:2)
$.ajax
是一个异步函数。
这意味着当被调用时,该函数会继续执行。
在您提供的代码中var days_data = load_days(03,2010);
会发生这种情况:
json_to_return
(undefined)days_data
== undefined json_to_return
被分配(这可能在任何时间段内发生)您应该重新考虑您的逻辑,并开始围绕ajax
调用的异步性进行编码。
第一种方法可能是将一个函数(回调)传递给load_days
,这应该在ajax
调用成功后调用。