2014-10-24 5 views
0

У меня проблема с областью переменной массива в Javascript. Вот мой кодJavascript Array Variable Scope

var features = new Array(); 
 
var x = 0; 
 

 
$.ajax({ 
 
    async: true, 
 
    url: domain + "client/applications/getFeatures", 
 
    dataType: 'json', 
 
    success: function(data) { 
 
    if (data.code == 200) { 
 
     $.each(data.data, function(i, val) { 
 
     features[x] = val.features_value; 
 
     x++; 
 

 
     }); 
 
    } 
 
    } 
 
}); 
 

 
alert(features[0]);

Результат всплывающего всегда "Undefine". У вас есть решения? Спасибо

+0

Я сделал, но все тот же – MyNameIsAnz

+3

, так как ваш аякс-вызов является асинхронным, значение предупреждения возвращается до завершения вызова ajax. Не включайте синхронный вызов, просто вызовите функцию обратного вызова в методе успеха, который показывает значение. – fcalderan

+0

Спасибо, он работает сейчас :) – MyNameIsAnz

ответ

3

У вас проблема не с переменной областью, она с асинхронным кодом.

Ваше предупреждение уволено перед успешным обратным вызовом, поэтому функции еще не установлены. Вместо этого сделайте что-то вроде этого:

$.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]); 
    } 
}); 
1

Если вам нужно использовать оповещение(); (например, вы не используете его для отладки), тогда вам нужно включить его в функцию успеха, потому что он асинхронный и ему нужно подождать, пока он не получит ответ, прежде чем показывать значение!