Ответ 1
Я никогда не понимал, почему люди всегда добавляют свои AJAX-запросы в интервалы, вместо того, чтобы позволить успешным вызовам AJAX просто называть себя, все время рискуя серьезной нагрузкой на сервер через несколько запросов, а не просто делая другой звонок, как только у вас был успешный вернитесь.
В этом свете мне нравится писать решения, в которых звонки AJAX просто называет себя завершением, например:
// set your delay here, 2 seconds as an example...
var my_delay = 2000;
// call your ajax function when the document is ready...
$(function() {
callAjax();
});
// function that processes your ajax calls...
function callAjax() {
$.ajax({
// ajax parameters here...
// ...
success: function() {
setTimeout(callAjax, my_delay);
}
});
}
Надеюсь, это имеет смысл!:)
Обновление:
После повторного рассмотрения этого вопроса мне было доведено до сведения, что в исходном вопросе, который мне необходимо уточнить и адресовать, возникла проблема в PHP-коде.
Хотя script выше будет отлично работать при создании задержки между вызовами AJAX, при добавлении в PHP-код в исходном сообщении script будет просто echo
'd столько раз, сколько количество строит SQL-запрос, создает несколько функций с тем же именем и, возможно, одновременно вызывает все вызовы AJAX... не очень-то круто...
Имея это в виду, я предлагаю следующее дополнительное решение: создайте array
с PHP скрипт, который может быть переварен JavaScript одним элементом за раз, чтобы достичь желаемого результата. Во-первых, PHP для построения строки массива JavaScript...
<?php
include("includes/configuratie.php");
$strSQL = mysql_query("SELECT workerID FROM tWorkers ORDER BY workerID ASC");
// build the array for the JavaScript, needs to be a string...
$javascript_array = '[';
$delimiter = '';
while($row = mysql_fetch_assoc($strSQL))
{
$javascript_array .= $delimiter . '"'. $row['workerID'] .'"'; // with quotes
$delimiter = ',';
}
$javascript_array .= ']';
// should create an array string, something like:
// ["1","2","3"]
?>
Далее, JavaScript для обработки и обработки массива, который мы только что создали...
// set your delay here, 2 seconds as an example...
var my_delay = 2000;
// add your JavaScript array here too...
var my_row_ids = <?php echo $javascript_array; ?>;
// call your ajax function when the document is ready...
$(function() {
callAjax();
});
// function that processes your ajax calls...
function callAjax() {
// check to see if there are id remaining...
if (my_row_ids.length > 0)
{
// get the next id, and remove it from the array...
var next_id = my_row_ids[0];
my_row_ids.shift();
$.ajax({
cache : false,
url : 'ajax2.php',
data : "workerID=" + next_id, // next ID here!
dataType : 'json',
success : function(data) {
// do necessary things here...
// call your AJAX function again, with delay...
setTimeout(callAjax, my_delay);
}
});
}
}