[ajax] Empêcher l'arrivée de données plus anciennes

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par jeroen, 16 Septembre 2008.

  1. jeroen
    jeroen WRInaute passionné
    Inscrit:
    30 Août 2002
    Messages:
    2 131
    J'aime reçus:
    0
    Salut à tous,
    Je rencontre un problème mineur mais pénible. J'ai un formulaire de recherche qui fonctionne via ajax sur un onkeyup, un peu à la manière de googleSuggest : les résultats sont rafraichis à chaque fois qu'un caractère est rentré.

    Le problème est le suivant : il arrive que les résultats provenant d'une chaine plus ancienne écrasent ceux provenants d'une chaine plus récente.

    Comment faire pour annuler une requête ajax "en cours" si une autre a été envoyée ?

    Merci
     
  2. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 003
    J'aime reçus:
    128
    Je ne suis pas sûr de comprendre. En général ce type d'implémentation fonctionne justement comme cela : au fur et à mesure que tu saisis des caractères à partir du seuil minimum que tu t'es fixé, la liste déroulée ce met à jour de manière à coller au plus près de la demande de l'internaute.

    Tu es parti du script livesearch ou d'une solution perso ?
     
  3. jeroen
    jeroen WRInaute passionné
    Inscrit:
    30 Août 2002
    Messages:
    2 131
    J'aime reçus:
    0
    je suis parti d'une solution perso.

    Au fur et à mesure que l'internaute tape, la liste se rafraichit effectivement, sauf que les rafraichissements n'arrivent visiblement pas dans l'ordre, et des anciens écrasent les nouveaux.

    Ex: je m'attends a voir ça :
    p > 10000 résultats
    pa > 1000 résultats
    par > 100 résultats
    pari > 10 résultats
    paris > 1 résultats

    alors que si je tape très vite "paris", les requêtes partent presque toutes en même temps, et vu quelles ne mettent pas toutes le même temps à être exécutées, elles n'arrivent pas dans l'ordre :evil: et j'ai un résultat du type :

    paris > 1000 résultats (qui correspond en fait à la réponse de la requête "pa", mais comme elle est arrivée en dernier elle a écrasé les réponses aux requêtes "par", pari", "paris")

    Compris le binz ?
     
  4. KMAMa2f
    KMAMa2f Nouveau WRInaute
    Inscrit:
    7 Juin 2006
    Messages:
    28
    J'aime reçus:
    0
    Bonjour,

    Tu pourrais peut-être envoyer une variable time avec ajax, quand tu génère tes résultats tu la met dans un input type hidden, après en javascript il est simple de vérifier si le résultat reçu doit être affiché ou pas en comparant les temps.
     
  5. jeroen
    jeroen WRInaute passionné
    Inscrit:
    30 Août 2002
    Messages:
    2 131
    J'aime reçus:
    0
    Merci, ce pourrait effectivement être une solution.

    En fait je fais une sélection des villes de France a partir de la 3ème lettre tapée, et parfois les réponses retournées étaient très longues (plus de 5000 résultats), j'ai contourné le problème en faisant un LIMIT 0,50 dans ma SQL_QUERY, le bug ne se produit plus et c'est plus rapide. C'était stupide de retourner trop de résultats.

    En surfant un peu j'ai aussi vu qu'il y avait une fonction xhr.abort() qui pourrait être LA solution, mais je ne sais pas trop comment l'utiliser.
     
Chargement...
Similar Threads - [ajax] Empêcher arrivée Forum Date
[Ajax] Appel fichier externe et sessions Développement d'un site Web ou d'une appli mobile 17 Juillet 2012
[AJAX] tester la présence d'un fichier distant Développement d'un site Web ou d'une appli mobile 17 Août 2011
[AJAX] Validation de form en ajax : captcha non reconnu Développement d'un site Web ou d'une appli mobile 21 Juin 2011
[Ajax] modifier un lien image Développement d'un site Web ou d'une appli mobile 26 Novembre 2008
[AJAX] Menu accordéon 3 niveaux ! Développement d'un site Web ou d'une appli mobile 26 Août 2008
[Ajax] script post ou get ? précision Développement d'un site Web ou d'une appli mobile 11 Juin 2008
[Ajax] Formulaire et envoie $_POST Développement d'un site Web ou d'une appli mobile 5 Juin 2008
[AJAX] Comment gérer les header('location: '); Développement d'un site Web ou d'une appli mobile 2 Juillet 2007
[AJAX] Descendre la scroll d'une pseudo frame Développement d'un site Web ou d'une appli mobile 17 Avril 2007
Site à référencer [ajax] Débuter en référencement 10 Avril 2007
[AJAX] Rafraichir une page avec un bouton Développement d'un site Web ou d'une appli mobile 23 Mars 2007
[AJAX] Formulaire de connexion à phpBB Développement d'un site Web ou d'une appli mobile 16 Février 2007
[AJAX] ou [PHP & JAVASCRIPT] ? Développement d'un site Web ou d'une appli mobile 16 Septembre 2006
[AJAX] Spotback Développement d'un site Web ou d'une appli mobile 14 Septembre 2006
[RESOLU] [AJAX] réellement assynchrone ? Développement d'un site Web ou d'une appli mobile 10 Mars 2006
[Ajax] probleme de charset Développement d'un site Web ou d'une appli mobile 8 Mars 2006
Empêcher le download mais autoriser la lecture mp3 URL Rewriting et .htaccess 17 Août 2021
WordPress Empêcher le scraping de mon site Administration d'un site Web 19 Novembre 2020
PHP empêcher form onsubmit si formulaire invalide Développement d'un site Web ou d'une appli mobile 29 Juin 2020
Comment empecher google d'indexer "une suite d'URL". Débuter en référencement 8 Mars 2020