Crea una cola de conjunto de todas tus solicitudes. Luego, si encuentra un punto donde debe cancelar todas las solicitudes existentes, puede recorrer el conjunto y cancelar todas las solicitudes pendientes. Debería ser bastante simple.
Aunque la otra forma es simplemente mantener un indicador interno que indica si una solicitud está actualmente en proceso y omitir la solicitud, si la hay. O maneja cómo te parezca.
EDIT: Marque esta cuestión de forma para una situación similar: How to avoid 3 ajax calls?
EDIT 2: Así que lo que puede hacer es tener una matriz que anexar todas sus llamadas Ajax. Que es esencialmente solo hacer una solicitud XmlHttp y eso es lo que se devuelve desde la llamada ajax. Así
requests.push(
$.ajax({
type: 'post',
url: '/test.php',
data: search_data,
success: function(data) {
$('#catalog').html(data);
}
}));
Esto agregará todas sus peticiones a un conjunto de peticiones que puede definir en alguna parte. Luego, cuando quiera eliminar todas las solicitudes pendientes, puede recorrer el conjunto y llamar a abortar, lo que matará a la solicitud.
for(var i = 0; i < requests.length; i++)
requests[i].abort();
O simplemente defina una variable fuera de su función que sea una bandera que indique si se está realizando una solicitud. Incluso puede hacerlo más específico y almacenar los datos de búsqueda y solo omitir las solicitudes que tienen una solicitud pendiente para los mismos datos y permitir otras solicitudes que son para datos diferentes.
Espero que eso sea suficiente para comenzar.
+1 lo hago utilizando exactamente el mismo método. (excepto el nombre 'ajax_request' var ^^) ... ¡Y funciona bien! – JoDev
Acabo de cambiar 'var ajax_request;' a 'var ajax_request = new XMLHttpRequest();' y funciona. +1 por la idea – smartrahat