Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript数组变量范围_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript数组变量范围

Javascript数组变量范围,javascript,jquery,ajax,Javascript,Jquery,Ajax,我对Javascript中的数组变量作用域有问题。这是我的密码 var features=newarray(); var x=0; $.ajax({ async:true, url:domain+“客户端/应用程序/获取功能”, 数据类型:“json”, 成功:功能(数据){ 如果(data.code==200){ $.each(data.data,function(i,val){ 特征[x]=val.features\u值; x++; }); } } }); 警报(功能[0])问题不在于变量

我对Javascript中的数组变量作用域有问题。这是我的密码

var features=newarray();
var x=0;
$.ajax({
async:true,
url:domain+“客户端/应用程序/获取功能”,
数据类型:“json”,
成功:功能(数据){
如果(data.code==200){
$.each(data.data,function(i,val){
特征[x]=val.features\u值;
x++;
});
}
}
});

警报(功能[0])问题不在于变量范围,而在于异步代码

您的警报在成功回调之前触发,因此尚未设置功能。改为这样做:

$.ajax({
  // ... other AJAX opts
  success: function(data){
    var features = new Array();
    if(data.code == 200){             
      var x = 0;
      $.each(data.data, function(i, val){
        features[x]=val.features_value;                    
        x++;
      });        

    }
    alert(features[0]);
  }
});

问题不在于变量作用域,而在于异步代码

您的警报在成功回调之前触发,因此尚未设置功能。改为这样做:

$.ajax({
  // ... other AJAX opts
  success: function(data){
    var features = new Array();
    if(data.code == 200){             
      var x = 0;
      $.each(data.data, function(i, val){
        features[x]=val.features_value;                    
        x++;
      });        

    }
    alert(features[0]);
  }
});

如果需要使用警报();(例如,您没有将其用于调试)然后您需要将其包含在success函数中,因为它是异步的,需要等到收到响应后再显示值

如果需要使用警报();(例如,您没有将其用于调试)然后您需要将其包含在success函数中,因为它是异步的,需要等到收到响应后再显示值

我做了,但是ajax调用仍然是异步的,警报值在ajax调用完成之前返回。请不要将调用转为同步,只需在显示值的success方法中调用回调函数。谢谢,它现在可以工作:)我这样做了,但与ajax调用是异步的一样,在ajax调用完成之前会返回警报值。请不要将调用转为同步,只需在显示值的成功方法中调用回调函数即可。谢谢,它现在可以工作:)