Como muitas pessoas no encadeamento observaram, apenas porque a solicitação foi abortada no lado do cliente, o servidor ainda processará a solicitação. Isso cria uma carga desnecessária no servidor, porque ele está fazendo um trabalho que paramos de ouvir no front-end.
O problema que eu estava tentando resolver (para o qual outras pessoas também se deparam) é que, quando o usuário inseria informações em um campo de entrada, eu queria acionar uma solicitação para uma sensação do tipo Google Instant.
Para evitar disparar solicitações desnecessárias e manter o snappiness do front-end, fiz o seguinte:
var xhrQueue = [];
var xhrCount = 0;
$('#search_q').keyup(function(){
xhrQueue.push(xhrCount);
setTimeout(function(){
xhrCount = ++xhrCount;
if (xhrCount === xhrQueue.length) {
// Fire Your XHR //
}
}, 150);
});
Essencialmente, isso enviará uma solicitação a cada 150ms (uma variável que você pode personalizar para suas próprias necessidades). Se você estiver com problemas para entender o que exatamente está acontecendo aqui, faça logon xhrCount
e xhrQueue
no console imediatamente antes do bloco if.
$.ajaxStop
?