Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/11/2010, 11h42   #1
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 153
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 153
Points : 25
Points : 25
Par défaut 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 :
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
Regis0122 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 12h13   #2
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 570
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 570
Points : 4 070
Points : 4 070
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))
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 14h08   #3
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 153
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 153
Points : 25
Points : 25
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 ?
Regis0122 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 14h56   #4
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 787
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 787
Points : 35 790
Points : 35 790
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 !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, 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
Bovino est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 15h06   #5
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 570
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 570
Points : 4 070
Points : 4 070
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
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 15h11   #6
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 153
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 153
Points : 25
Points : 25
ce sont pour des besoins de tests, donc ça peut durer ... longtemps
Citation:
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 ...
Regis0122 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 15h21   #7
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 570
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 570
Points : 4 070
Points : 4 070
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 ...
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 16h12   #8
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 153
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 153
Points : 25
Points : 25
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 ...
Regis0122 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 16h21   #9
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 570
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 570
Points : 4 070
Points : 4 070
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... ^^
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 16h23   #10
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 127
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 127
Points : 7 275
Points : 7 275
Bonsoir,

Code :
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);
    }
}
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/11/2010, 16h36   #11
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 153
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 153
Points : 25
Points : 25
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 ????
Regis0122 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 16h44   #12
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 127
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 127
Points : 7 275
Points : 7 275
20000 milliseconde après de lancer la requête et on abandonne.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 17h20   #13
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 570
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 570
Points : 4 070
Points : 4 070
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) ^^
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 17h33   #14
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 127
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 127
Points : 7 275
Points : 7 275
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
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 10h05   #15
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 153
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 153
Points : 25
Points : 25
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 :
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 ...
Regis0122 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 10h24   #16
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 570
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 570
Points : 4 070
Points : 4 070
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... ^^
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 10h40   #17
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 127
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 127
Points : 7 275
Points : 7 275
@RomainVALERI

Citation:
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"

Citation:
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+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 11h04   #18
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 153
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 153
Points : 25
Points : 25
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
Regis0122 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 11h19   #19
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 127
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 127
Points : 7 275
Points : 7 275
Essaye avec ça

Code :
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+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 11h21   #20
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 127
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 127
Points : 7 275
Points : 7 275
Euh, le premier code que j'ai proposé correspond à la réponse de la titre de la discussion non
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h45.


 
 
 
 
Partenaires

Hébergement Web