我正在尝试将 ajax 成功数组从一个函数返回到另一个函数。由于某种原因,我似乎无法将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;
}
最佳答案
这部分函数稍后发生:
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);
}
});
关于javascript - Jquery post success变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2563827/