Jquery发布成功变量范围

sal*_*ers 2 javascript variables ajax json scope

我正在尝试将ajax成功数组从一个函数返回到另一个函数.由于某种原因,我似乎无法将存储在ajax函数成功部分的变量中的数据传递给父函数返回.

我看了看这篇文章试图找出问题,但没有这样的运气: jQuery Ajax调用 - 设置成功的变量值

非常感谢您的帮助.

这是代码的简化版本:

// 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;

}   
Run Code Online (Sandbox Code Playgroud)

Nic*_*ver 6

这部分功能发生在以后:

success: function(available_json){
                   json_to_return = available_json;
               }
Run Code Online (Sandbox Code Playgroud)

因此,您返回的变量是未定义的,因为设置它的代码在响应从服务器返回之前不会发生.从成功函数调用其余的代码,因此它将在数据准备好或设置时运行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);
               }
             });
Run Code Online (Sandbox Code Playgroud)

更好的方法:

              $.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);
               }
             });
Run Code Online (Sandbox Code Playgroud)