Javascript Jquery post success变量范围
我试图将ajax成功数组从一个函数返回到另一个函数。出于某种原因,我似乎无法将存储在ajax函数成功部分的变量中的数据传递给父函数以返回 我看了这篇文章试图想办法解决问题,但不是运气好: 非常感谢您的帮助 下面是代码的简化版本:Javascript Jquery post success变量范围,javascript,ajax,json,variables,scope,Javascript,Ajax,Json,Variables,Scope,我试图将ajax成功数组从一个函数返回到另一个函数。出于某种原因,我似乎无法将存储在ajax函数成功部分的变量中的数据传递给父函数以返回 我看了这篇文章试图想办法解决问题,但不是运气好: 非常感谢您的帮助 下面是代码的简化版本: // make json_to_return global var json_to_return; function loop_through_data(){ // call the load_days function and put its array d
// 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;
}
因此,返回的变量是未定义的,因为设置该变量的代码在服务器返回响应之前不会发生。调用success函数运行代码的其余部分,以便在数据准备就绪时运行,或者设置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);
}
});
$。ajax
是一个异步函数
这意味着调用时,函数将继续执行
在您提供的代码中var days\u data=load\u days(032010)代码>发生这种情况:
- 启动ajax调用(异步,函数保持执行)
- return
json\u to\u return
(未定义)
days\u数据
==未定义
- ajax调用完成后,
json\u to\u return
被分配(这可以在任何时间跨度内发生)
您应该重新考虑您的逻辑,并开始围绕ajax
调用的异步性进行编码
第一种方法可能是将一个函数(回调)传递给load_days
,该函数应该在ajax
调用成功后调用。哪里有“保留我新的愚人节头像”按钮?谢谢,我没有意识到在帖子完成之前触发了返回。现在一切都有意义了。我将对事情进行重新调整,以便它们在成功中发生:我希望将其用作一个实用程序,可以从多个函数调用,但这将暂时起作用。