Javascript数组变量范围
我对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])问题不在于变量
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调用完成之前会返回警报值。请不要将调用转为同步,只需在显示值的成功方法中调用回调函数即可。谢谢,它现在可以工作:)