2012-02-24 3 views
0
for (var i = 0; i < 3; i++){ 
    $.ajax({ 
     url: "ajax.php", 
     success: function(data){ 
      alert(i); 
     } 
    }); 
} 

Мне нужно решение для получения предупреждений с «0», «1» и «2». В это время, конечно, я вижу 3 предупреждения с «3».jQuery. получить var от ajax в цикле

+0

Попробуйте сохранить значение 'i' во временную переменную (например,' j') внутри цикла и использовать ее в обработчике 'success'. – millimoose

+0

Возможный дубликат функции [Variable in JavaScript callback всегда получает последнее значение в цикле?] (Http://stackoverflow.com/questions/2520587/variable-in-javascript-callback-functions-always-gets-last-value-in -loop) – Quentin

+0

Я пробовал - он не работал – Eddie

ответ

4

Вам нужно положить замыкание вокруг вашего звонка $.ajax().

for (var i = 0; i < 3; i++){ 
    (function (loop_var) { 
     $.ajax({ 
      url: "ajax.php", 
      success: function(data){ 
       alert(loop_var); 
      } 
     }); 
    })(i); 
} 

В настоящее время он выводит 3 как мой момент Ajax возвращает значение i действительно 3.

+0

Это работает. Благодаря! – Eddie

+0

Рад, что это помогло :-) – jabclab

2

Используйте анонимную функцию обертку вокруг кода, чтобы создать замыкание, которое будет держать значение, пока не наступит асинхронный ответ:

for (var i = 0; i < 3; i++){ 

    (function(i){ 

    $.ajax({ 
     url: "ajax.php", 
     success: function(data){ 
     alert(i); 
     } 
    }); 

    })(i); 

} 
+0

То же, что и решение @jakeclarkson - оно работает. Благодарю. Также +1 – Eddie

0

Передайте значение я на странице ajax.php в качестве параметра. Страница ajax.php должна вернуть i на вызывающую страницу. Так что пусть ajax.php страница вернется i. Вы можете использовать объекты json или тривиальную строку, разделенную каналами, для хранения возвращаемых значений из ajax.php.

for (var i = 0; i < 3; i++){ 
    $.ajax({ 
     data: {par: i}, 
     url: "ajax.php", 
     success: function(data){ 
      //data is a pipe-separated string 
      var cnt = data.split("|")[0]; 
      alert(cnt); 
     } 
    }); 
} 
Смежные вопросы