jQuery的阿贾克斯()的局部变量不能分配到全球变量、局部、分配、全球

2023-09-11 01:02:08 作者:别让我独醉

我有一个jquery的ajax code如下:

I have a jquery ajax code as following:

$(document).ready(function() {
  var global_arr = new Array();
  $.ajax({
    url: 'result.php',
    type: 'post',
    dataType: 'json',
    success: function(data) {
       $.each(data, function(key, value) {
          global_arr.push(value.name);
       });
       alert(global_arr); //get correct value, works fine
     }
  }); //end of ajax function
  alert(global_arr); //get null, it doesn't work properly
});

请注意行提醒global_arr,为什么我不能获得价值超出$阿贾克斯()函数? 感谢任何人能帮助这一点。

Notice the lines to alert global_arr, why I can't get the value out of $.ajax() function? Thanks anyone help on this.

推荐答案

阿贾克斯需要时间来完成。该函数的执行并不需要几乎同样多的时间。所以,当你得到你的警报Ajax请求之外,Ajax请求仍然使用的时间来完成(无论是在传输还是在服务器端的操作)。

Ajax takes time to complete. The function execution does not take nearly as much time. So by the time you get to your alert outside of the ajax request, the ajax request is still using time to complete (either in transmission or in server side actions).

您可以随时等待AJAX​​方法来完成。

You can always wait for the ajax method to be complete.

$(document).ready(function() {

 var global_arr = new Array();
 var complete = false;//flag to wait for ajax completion
 $.ajax({
  url: 'result.php',
  type: 'post',
  dataType: 'json',
  success: function(data) {
   $.each(data, function(key, value) {
      global_arr.push(value.name);
   });
   alert(global_arr); //get correct value, works fine
   complete = true;//mark ajax as complete
  }
 }); //end of ajax function

 (function runOnComplete(){
  if( complete ){//run when ajax completes and flag is true
   alert(global_arr);
  }else{
   setTimeout(runOnComplete,25);//when ajax is not complete then loop
  }
 })()
});

然而,最常见的方法是使用一个回调

However, the most common way is to use a callback.

$(document).ready(function() {

 function runOnComplete(){//code executes once ajax request is successful
  alert(global_arr);
 }
 var global_arr = new Array();
 $.ajax({
  url: 'result.php',
  type: 'post',
  dataType: 'json',
  success: function(data) {
   $.each(data, function(key, value) {
    global_arr.push(value.name);
   });
   alert(global_arr); //get correct value, works fine
   runOnComplete();//callback
  }
 }); //end of ajax function
});