This post was originally published on Coding Glamour.

Tijdens het productiewaardig krijgen van de Javascript van de nieuwe zoeksuggesties stuitte ik op een probleem waarin de gebruiker snel achter elkaar doortypt:

amst            (request #1)
amste            (request #2)
amster            (request #3)

Geen probleem zolang de requests allemaal even lang duren. Maar wanneer deze terugkomen in de volgorde:

#1
#3
#2

staat er verkeerde data in de suggesties. Oplossingsrichting
In mijn prototype koos ik ervoor om zoiets te implementeren:

var state = { ajaxRequest: null };
function suggest(query) {
    if(state.ajaxRequest) state.ajaxRequest.abort();
    state.ajaxRequest= $.get("...", function(response) {
        if(!response) // aborted; return;
        
        state.ajaxRequest= null; // alleen als succesvol
    });
}

Niet alleen vrij veel code, maar ook het aborten zat me niet helemaal lekker. Nu voor een wat cleanere manier gekozen:

var state = { requestCounter: 0 };
function suggest(query) {
    var requestCounter = ++state.requestCounter;
    $.get("...", function (response) {
        if(requestCounter !== state.requestCounter) return; // is al een nieuwe
    });
}


Werkt volgens mij net zo goed, of zie ik iets helemaal over het hoofd?