2013-07-24 3 views
0

У меня есть глобальный массив javascript, и я могу вызывать значения из него в начале функции, но после этого, когда я предупреждаю лидеров [i], он отображается как неопределенный: Появляется проблема возникает, когда есть два вызова ajax, вложенные друг в друга, JS, похоже, не может найти значения в массиве.Javascript Variable Отображение undefined

JS

function getLeaders(bool) { 
    var leaders = new Array(); 
    leaders.push('444'); 
    leaders.push('111'); 
    $.ajax({ 
     url: 'url', 
     crossDomain: true, 
     type: 'post', 
     data: { 
      'clubID': curClub 
     }, 
     success: function (data) { 
       for (var i = 0; i < leaders.length; i++) 
       { 
        alert(leaders[i]); <===== working fine here 
        $.ajax({ 
         url: 'someurl', 
         crossDomain: true, 
         type: 'post', 
         data: { 
          'id': leaders[i] <====== works here 
         }, 
         success: function(data3) { 
          alert(leaders[i]);  <======= undefined here 
          var json3 = jQuery.parseJSON(data3); 
         } 
       }); 
      } 
      } 
     }); 
    }; 
+0

Конечно, если имеет смысл. Переменная 'i' изменяется на значение leader.length к моменту завершения вашего второго ajax. Попробуйте консоль зарегистрировать ваше значение i –

+0

Вероятно, такое использование вложенности переменной связано с плохой структурой кода –

+1

Hm .. лидеры, кажется, имеют длину 2, хотя и цикл продолжается до <2 – TGH

ответ

2

Так как вызов является асинхронным значение I более чем вероятно leader.length к тому времени, вызов возвращается. Таким образом, вы, вероятно, получаете доступ к индексу, который выходит за рамки.

+0

Я не думаю, что смогу это сделать, потому что мне нужны лидеры [i] в ​​моем втором звонке ajax – nshah

+0

Возможно, просто не хорошо, поскольку я использовал как надежный отказ от ответственности. – CBIII

+0

Я напечатал i внутри второго успеха, и это было 2, вы были правы – nshah