Трудно сказать, с чем вы сталкиваетесь, вопрос немного неясен.
setInterval
отлично подходит для некоторых вещей, но не для чего-либо, где вы собираетесь смешивать другие асинхронные вещи с ним. Вместо этого используйте идиому «rescheuling setTimeout
»:
setTimeout(doSomething, 1000);
function doSomething() {
$.ajax("your_url", {
success: function() {
// Do something here
// Do something else here
},
complete: function() {
// Previous run complete, schedule the next run
setTimeout(doSomething, 1000);
}
});
}
... потому что, в конце концов, ваш ajax
вызов может занять больше секунды.
Если это не та проблема, с которой вы столкнулись, я думаю, ваш код выглядит примерно так:
setInterval(function() {
$.ajax("your_url", {
success: function() {
// Do something here
}
});
// Do something else here
}, 1000);
... и вам интересно, почему код "Сделай что-то еще здесь" выполняется перед кодом "Делай что-то здесь". Если это так, то причина в том, что по умолчанию ajax-вызовы асинхронны . Ваш звонок $.ajax
начинает звонок, но это все; тогда весь ваш другой код выполняется до того, как произойдут обратные вызовы (или ошибки).
Исправление, конечно, состоит в том, чтобы не делать ничего еще на верхнем уровне, который зависит от обратного вызова успеха:
setInterval(function() {
$.ajax("your_url", {
success: function() {
// Do something here
// Do something else here
}
});
}, 1000);