Прежде всего, используйте некоторую логику последовательности. Это гарантирует, что ваш последний запрос превалирует над старым.
Здесь у вас есть пример .
Кроме того, вы можете воспользоваться этими $.ajax
настройками:
timeout:
установить ограничение по времени для запроса и предотвратить молчание при сбое запросов.
beforeSend:
Перед выполнением вызова подтвердите некоторые условия. Дополняет помощник секвенирования.
As of jQuery 1.5, the beforeSend option will be called regardless of the type of request.
Пример:
function updateResults() {
// Init counter & record current request
if (!window.reqSeq) window.reqSeq = 0;
window.reqSeq +=1;
var thisRequest = window.reqSeq;
$.ajax({
url: [..],
crossDomain: true,
contentType: "application/json",
dataType: 'jsonp',
timeout: 5000, // give 5 seconds of margin
data: { [..] },
beforeSend: function() {
if(thisRequest < window.reqSeq) {
return false;
}
},
success: function(data, textStatus, jqXHR) {
if(thisRequest < window.reqSeq) {
return;
}
else print(data);
},
error: function(jqXHR, textStatus, errorThrown) {
// it'll be called on timeout (error) and beforeSend (abort)
print(textStatus);
}
});
}