Я немного озадачен тем, как решить эту проблему.
У меня есть функция updateDate (id), которая обновляет определенную строку в базе данных с помощью переданного идентификатора. Эта функция делает AJAX-вызов PHP-скрипта, и для ее запуска требуется немного времени.
Затем у меня есть другая функция updateDates (), которая выполняет AJAX-вызов другого PHP-скрипта для получения всех идентификаторов, требующих обновления, затем выполняет их цикл и вызывает updateDate (id) с текущим идентификатором в цикле.
Проблема в том, что цикл не ожидает ответа от updateDate (id) перед продолжением цикла, поэтому он создает как 2398572375 AJAX-вызовы одновременно и выдает ошибку.
Как я могу заставить цикл ждать ответ от updateDate (id), прежде чем продолжить?
updateDate (id) возвращает true, когда readyState AJAX-вызова равен 4 (имеется в виду, когда ответ сделан), и я попытался в цикле сделать:
if( updateDate( id ) ) { Do something. }
Не помогло.
Есть идеи по этому поводу?
РЕДАКТИРОВАТЬ: Вот часть кода в соответствии с просьбой.
updateDates ():
function updateDates()
{
ids = new XMLHttpRequest();
ids.open( "GET", "<?php echo anchor("index.php/main/ajax/getIdsToUpdate"); ?>", true );
ids.onreadystatechange = function() {
if( ids.readyState == 4 )
{
var response = $.evalJSON( ids.responseText );
if( response.type == 1 )
{
$.each( response.message, function( index, value ) {
if( value != '' )
{
if( updateDate( value ) )
alert('Checked: ' + value);
}
});
}
}
}
ids.send(null);
}
updateDate (id):
function updateDate( id )
{
req = new XMLHttpRequest();
req.open("GET", "<?php echo anchor("index.php/main/ajax/updateDate/"); ?>" + id, true);
req.onreadystatechange = function() {
if( req.readyState == 4 )
{
var value = $.evalJSON( req.responseText );
// Updating a DIV on the site..
return true;
}
}
req.send(null);
}