2010-10-18 7 views
0

Est-ce que jQuery a des outils que je peux utiliser pour la limitation des requêtes? Quelque chose de similaire à comment fonctionne l'auto complète.jQuery auto complete requête throttling

Plus précisément ceci est le genre de chose que je suis en train de faire:

 
    **Customer entry:** 
    First Name: J 
    Last Name: Smi 

    **Search results:** 
    Joe Shmoe  -edit button- 
    John Smith -edit button- 
    Jane Smith -edit button- 
    Joe Smithers -edit button- 

Lorsqu'un utilisateur tape un quoi que ce soit dans l'une des boîtes, je voudrais formuler moi-même demande, puis jQuery peut décider quand et si envoyer la demande, puis je fournirai le code pour gérer la réponse.

Répondre

0

Voici le code que j'ai fini d'écrire pour les demandes de limitation.

Initialisation:

var global = {}; 
global.searchThrottle = Object.create(requestThrottle); 

Utilisation:

this.searchThrottle.add(function(){ 
     //Do some search or whatever you want to throttle 
}); 

code source:

// runs only the most recent function added in the last 400 milliseconds, others are 
// discarded 
var requestThrottle = {}; 

// Data 
requestThrottle.delay = 400; // delay in miliseconds 

requestThrottle.add = function(newRequest){ 
this.nextRequest = newRequest; 
if(!this.pending){ 
    this.pending = true; 
    var that = this; 
    setTimeout(function(){that.doRequest();}, this.delay); 
} 
} 

requestThrottle.doRequest = function(){ 
var toDoRequest = this.nextRequest; 
this.nextRequest = null; 
this.pending = false; 
toDoRequest(); 
} 

code source Object.create() (extrait de "Javascript: The Good Parts"):

if(typeof Object.create !== 'function'){ 
Object.create = function(o){ 
    var F = function(){}; 
    F.prototype = o; 
    return new F(); 
}; 
} 
+0

La méthode setTimeout() ne fait prendre une référence de fonction comme premier paramètre. Vous pouvez faire: '' 'fonction foo() {}; setTimeout (foo, 5000) '' '. Puisque l'exécution différée est, par défaut, dans la portée de la fenêtre, les méthodes d'instance d'objet requièrent un ajout (Jquery a des plugins en cours, Prototype a un Function.curry intégré) – johnvey

+0

Ouais, tu as raison, j'ai changé le code ci-dessus. Je ne sais pas pourquoi chaque exemple que j'ai trouvé en ligne envoie une chaîne comme premier paramètre. –