2011-10-25 4 views
1

J'ai un champ de formulaire anticipé qui recherche les enregistrements de personnes en fonction des champs de formulaire du prénom et du nom de famille .. Les champs sont postés par Jquery et la liste des personnes est retournée en JSON et les résultats sont affichés sous forme de tableau. La demande de publication est soumise pour chaque événement keyup. Mais j'ai un problème avec ça.Spring MVC - Réponse JSON - Comment prévenir

Disons, l'utilisateur a entré «a» dans le champ prénom. La demande est soumise en tant qu'appel ajax. Ensuite, l'utilisateur entre «b» dans le champ. Maintenant, la requête est à nouveau soumise avec 'ab' comme prénom. Le problème est que 'ab' a moins de résultats, donc les résultats sont affichés instantanément. Puisque 'a' a plus de résultats, il faut un certain temps pour traiter et construire la table des résultats et une fois que la table est construite, elle remplace la table existante pour 'ab'. Ce n'est pas le comportement que je veux car 'a' était la première requête et 'ab' était la dernière requête, elle ne devrait pas être déplacée. Alors, comment puis-je empêcher les résultats de l'ancienne requête de déplacer de nouveaux résultats. Merci d'avance!

--- Mise à jour ---

méthode du contrôleur

est quelque chose comme ..

public @ResponseBody List<PSPerson> getPersonsWithNames(
     @RequestParam("firstName") String firstName, @RequestParam("lastName") String lastName) 
{ 

    Map<String, String> attrMap = new HashMap<String, String>(); 

    attrMap.put("firstName", firstName); 
    attrMap.put("lastName", lastName); 

    return personService.getPeople(attrMap); 
} 

Répondre

0

Peut-être que vous pouvez ajouter un horodatage à vos valeurs Json retour. Et dans votre jquery comparer le dernier horodatage reçu à l'actuel.

+0

merci pour la réponse WarfarA .. La réponse JSON est une liste d'objets Person. comment ajouter une variable supplémentaire à cette réponse? – RKodakandla

0

Beaucoup des formes look avant/autocomplete que vous voyez sur le web ont un « compte de seuil » de caractères (par exemple dans PengoWorks jQuery Autocomplete il est minChars,). Si vous utilisez ce plugin jQuery, vous pouvez également utiliser l'option delay pour spécifier le nombre de millisecondes à attendre avant d'envoyer la requête AJAX.

Si vous utilisez une valeur minChars typique comme 3, plus une valeur delay raisonnable peut-être 100ms, vous aurez probablement « rétréci vers le bas » assez l'espace de recherche de ne pas avoir de problèmes avec un ResultSet « dépassement » une autre.

Vous pouvez essayer de jouer avec ces valeurs here.

Edit: Les mêmes options sont disponibles dans jQueryUI - ils sont appelés minLength et delay.