javascript - Jquery post success变量范围

标签 javascript ajax json variables scope

我正在尝试将 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/

相关文章:

javascript - Jquery ajax 不工作(Laravel 4)

javascript - 在 foreach 循环内调用 javascript 函数,等待回复?

json - PostgreSQL:有没有办法提高使用 JSONB 或 HSTORE 键的 SELECT 查询的性能?

javascript - 使用 reduce 实现 map

javascript - 如何将 html 从当前页面附加到另一个页面?

javascript - 我被 html/javascript 网页困住了

javascript - 访问控制允许方法似乎不起作用

java - 使用多态成员将 Json 反序列化为 Java

ios - 如何在对象内部映射 JSON 数据对象?

javascript - 将函数附加到 before.jstree