IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] Abort sur une onreadystatechange


Sujet :

AJAX

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 153
    Par défaut [AJAX] Abort sur une onreadystatechange
    bonjour à tous,

    J'ai le code suivant, en asynchrone

    Dans le bloc mon_div, il y a d'écrire "cliquer ici pour démarrer"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var content = document.getElementById("mon_div");
     
    var page="index.php";
    XhrObj.open("GET", page, true);
    XhrObj.send(null);		
     
    XhrObj.onreadystatechange = function()
    {
        if (XhrObj.readyState == 4 && XhrObj.status == 200) 
        {
            content.innerHTML=XhrObj.responseText;
        }
    }
    mais il se trouve que mon index.php peut être bloqué pendant plusieurs heures. Donc la fonction onreadystatechange ne devrait pas être appelée dans que l'index n'a pas renvoyé les infos.

    Or, dans le bloc "mon_div", div dans laquelle j'affiche le résultat, tout à coup, il n'y a plus rien de dedans, il est vidé (le texte "cliquer ici pour démarrer" a disparu)

    Avez-vous une idée de ce qui se passe ? existe-il un timeout en asynchrone sur les objets activeX ... j'avoue être sans idée ???


    Merci infiniment pour votre coup de main

  2. #2
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    A priori, on est censés définir la callback avant de faire l'appel ajax ^^

    1) définition de onreadystatechange
    2) open
    3) send

    (éventuellement aussi : as-tu contrôlé la valeur de ton XhrObj.status avant le test dans onreadystatechange ? (parfois un code "0" est renvoyé même en cas de succès))

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 153
    Par défaut
    oui, mais la ça revient au même non ? mon problème n'est pas la puisque ça marche très bien si l'index ne bloque pas longtemps (4, 5 heures par exemple)... non ?

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Regis0122
    ça marche très bien si l'index ne bloque pas longtemps (4, 5 heures par exemple)... non ?
    4 5h, tu trouves que c'est pas long ?

    Ca dépend des réglages du serveur, mais normalement, la connexion se coupe au bout de trois minutes...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Oui, j'ai du rater un truc aussi parce que le principe d'AJAX, c'est pas vraiment d'attendre quatre heures que la page se mette à jour en ce qui me concerne je suis pas particulièrement du genre impatient mais j'espère que ton utilisateur est bien assis

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 153
    Par défaut
    ce sont pour des besoins de tests, donc ça peut durer ... longtemps
    Ca dépend des réglages du serveur, mais normalement, la connexion se coupe au bout de trois minutes...
    c'est à dire ?
    Mais pour etre plus précis, mon pb arrive au dela de ces 3heures dont tu parles ...

  7. #7
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Citation Envoyé par Regis0122 Voir le message
    ce sont pour des besoins de tests, donc ça peut durer ... longtemps
    Citation Envoyé par Bovino
    Ca dépend des réglages du serveur, mais normalement, la connexion se coupe au bout de trois minutes...
    c'est à dire ?
    Mais pour etre plus précis, mon pb arrive au dela de ces 3 heures dont tu parles ...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 153
    Par défaut
    a pardon, je ne parle pas en minute moi
    euh ... une idée ???
    Y'a t-il un timeout sur l'asynchrone ?
    ... ou je ne sais quoi ...

  9. #9
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Tu es sur que tes choix techniques sont adaptés à ton besoin ? ^^

    Qu'est-ce que tu veux faire, au final, qui nécessite de se passer dans un navigateur mais prend plusieurs... heures (glup ) à mettre une page à jour... ?

    Dis-nous en plus, il doit y avoir un autre moyen de procéder... ^^

  10. #10
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var page="index.php";
    XhrObj.open("GET", page, true);
    XhrObj.send(null);
    var annuler = setTimeout(function() {XhrObj.abort();}, 20000);
    XhrObj.onreadystatechange = function()
    {
        if (XhrObj.readyState == 4 && XhrObj.status == 200) 
        {
            content.innerHTML=XhrObj.responseText;
            clearTimeout(annuler);
        }
    }

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 153
    Par défaut
    merci pour ta contribution andry.aime
    euh ... pour être certain de comprendre ce que tu me proposes, tu me suggères de rappeler la fonction de callback (d'évènement onreadystatechange ) tous les 20000s pour contourner un éventuel abandon ?
    est-ce bien ça ?

    si oui, pourquoi XhrObj.abort() ????? car celui-ci va annuler la requete précédente (le send) et donc je ne risque plus de recevoir des infos dans ma fonction d'évènements XhrObj.onreadystatechange ????

  12. #12
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    20000 milliseconde après de lancer la requête et on abandonne.

  13. #13
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Citation Envoyé par Regis0122 Voir le message
    merci pour ta contribution andry.aime
    euh ... pour être certain de comprendre ce que tu me proposes, tu me suggères de rappeler la fonction de callback (d'évènement onreadystatechange ) tous les 20000s pour contourner un éventuel abandon ?
    est-ce bien ça ?
    ...
    Tu confonds setTimeout (ponctuel) et setInterval (périodique) ^^

  14. #14
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Citation Envoyé par Regis0122 Voir le message
    donc je ne risque plus de recevoir des infos dans ma fonction d'évènements XhrObj.onreadystatechange
    C'est ce que tu veux faire si le temps d'exécution dure quelques heures (4 ou 5 seulement) non

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 153
    Par défaut
    euh non !!

    Tu me proposes de faire abandonner la callback onreadystatechange() alors que je ne le souhaite pas.

    Je reformule mon pb donc
    J'ai écrit "cliquer ici pour démarrer" dans mon_div (c'est un exemple)
    Je clique sur un bouton et l'index.php est appelé, l'index.php est désormais en cours d'exécution ... mais ça peut durer durer durer ...

    Au bout d'un certain temps je constate qu'il n'y a plus rien d'écris dans mon_div ... et je ne comprends pas pourquoi ?

    le seul moyen pour qu'il n'y ait rien d'écrit dedans c'est que la réponse renvoyé soit vide dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    content.innerHTML=XhrObj.responseText
    non ????
    Je sais que l'index est toujours en cours d'éxécution par un mecanisme qui serait trop long à vous expliquer.

    Je me suis donc dit que la callback devait être appelé au bout d'un certain temps, une sorte de timeout ?? à moins que ce soit le browser Mozilla ... je ne sais vraiment plus ...

  16. #16
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Deux informations à rapprocher
    Citation Envoyé par Bovino Voir le message
    4 5h, tu trouves que c'est pas long ?

    Ca dépend des réglages du serveur, mais normalement, la connexion se coupe au bout de trois minutes...
    Citation Envoyé par Regis0122 Voir le message
    Je me suis donc dit que la callback devait être appelé au bout d'un certain temps, une sorte de timeout ?? à moins que ce soit le browser Mozilla ... je ne sais vraiment plus ...
    Par contre en ce qui me concerne, si tu ne veux pas nous en dire plus sur ton contexte*, pas la peine de se battre sans armes contre un ennemi invisible et absent... j'abandonnne ^^ bonne chance !

    *le problème n'étant, comme souvent, absolument pas technique, mais lié à un choix de conception... ^^

  17. #17
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    @RomainVALERI

    Au bout d'un certain temps je constate qu'il n'y a plus rien d'écris dans mon_div ... et je ne comprends pas pourquoi ?
    Parce que tu n'as pas lu ce que disait Bovino plus haut et que tu n'auras pas "XhrObj.status == 200"

    Je me suis donc dit que la callback devait être appelé au bout d'un certain temps, une sorte de timeout ?? à moins que ce soit le browser Mozilla ... je ne sais vraiment plus ...
    Tu ne peux pas le faire (à ma connaissance) .

    A+.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 153
    Par défaut
    tu abandonnes bien vite Romain et puis, si je n'en dis pas plus c'est parce que je voulais que le problème soit épuré ... pour ne pas être trop compliqué à lire, je ne cache rien.
    Alors je vais compléter un peu, lorsque mon index.php est appelé, j'ouvre une socket non-bloquante, et j'envoie des commandes via la socket. Une boucle lit régulièrement les réponses de la sockets (c'est un listener), et lorsque que celle-ci reçoit une chaine bien spécifique, alors celle-ci se ferme et ainsi la réponse est écrite dans mon_div.

    Aussi, sachez que pour m'affranchir de tout problème, j'ai fixé un delai d'espiration inifini aux scripts en faisant un set_time_limit(0)

    Vous me suivez ? Ca vous aide à trouve mon pb ???

    Oui andry.aime, j'ai tout à fait conscience XhrObj.status ne devrait pas être égal à 200 si la callback avortait !!!

    Mais alors comment vous expliquez que tout à coup y'a plus rien dans mon_div ??


    En tout cas je vous dois déjà un grand merci pour l'interet que vous portez à mon bazar

  19. #19
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Essaye avec ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    XhrObj.send(null);
    XhrObj.onreadystatechange = function()
    {
        if (XhrObj.readyState == 4) 
        {
            if(XhrObj.status == 200){
                content.innerHTML=XhrObj.responseText;
            }else{
                content.innerHTML="Pas de reponse serveur";
            }
        }
    }
    Et attend 4 ou 5 heures pour voir ce que ça fait.

    /me est mort de rire.
    A+.

  20. #20
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Euh, le premier code que j'ai proposé correspond à la réponse de la titre de la discussion non

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/05/2009, 09h59
  2. [AJAX] zoom sur une image + déplacement
    Par yann.morineau dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/02/2009, 09h41
  3. [AJAX] requete sur une page php
    Par xokami35x dans le forum Général JavaScript
    Réponses: 25
    Dernier message: 20/11/2008, 20h35
  4. [AJAX] Rafraîchissement automatique sur une liste déroulante
    Par frutix dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/04/2007, 16h09
  5. [AJAX] Avoir des infos sur une page web
    Par Skieur38 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/03/2007, 21h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo