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 28/03/2008, 15h18   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 88
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 88
Points : 14
Points : 14
Par défaut Arrêter une requete xhtmlrequest

Bonjour,

J'ai cherché un peu partout et malheureusement je n'ai pas trouvé mon bonheur.
Je voudrai stopper une requete si elle dépasse un délai de x secondes.

j'ai testé la méthode abort() mais elle ne marche pas sur tous les navigateurs et ne m'affiche pas ce que je veux.

Si quelqu'un a des infos sur ce sujet.
Merci car là je suis bloqué.
watchabongo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2008, 03h18   #2
Membre actif
 
Avatar de Ikonic
 
Inscription : février 2007
Messages : 197
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 197
Points : 162
Points : 162
Salut,

Je cherche aussi depuis un an...
__________________
piksite.com
Pour vos photos, images, .... » Carousel.us
Ikonic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 09h59   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 88
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 88
Points : 14
Points : 14
Citation:
Envoyé par Ikonic Voir le message
Salut,

Je cherche aussi depuis un an...
ça me rassure pas ce que tu me dis la
watchabongo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 15h23   #4
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 316
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2007
Messages : 9 316
Points : 15 522
Points : 15 522
Bonjour,
Citation:
Envoyé par watchabongo Voir le message
j'ai testé la méthode abort() mais elle ne marche pas sur tous les navigateurs et ne m'affiche pas ce que je veux.
peux-tu préciser (vu que ça devrait être la bonne méthode) ?
Avec quel navigateur ne fonctionne-t-elle pas ?
Comment l'utilises-tu ?
Qu'est-ce que tu voudrais qu'elle t'affiche, si la requête est interrompue ?

A+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 17h27   #5
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 88
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 88
Points : 14
Points : 14
Donc déjà voila mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<script type="text/javascript">
 
    function makeRequest(url) {
 
        var xhr = false;
 
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            xhr = new XMLHttpRequest();
            if (xhr.overrideMimeType) {
                xhr.overrideMimeType('text/xml');
                // Voir la note ci-dessous à propos de cette ligne
            }
        }
        else if (window.ActiveXObject) { // IE
            try {
                xhr = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e) {
                try {
                    xhr = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e) {}
            }
        }
 
        if (!xhr) {
            alert('Abandon :( Impossible de créer une instance XMLHTTP');
            return false;
        }
 
 
		xhr.onreadystatechange = function() { alertContents(xhr); };
        xhr.open('GET', url, true);
		xhr.send(null);
		setTimeout(abortRequest, 10000);
 
 
// on annule la requete après 10 secondes
function abortRequest() {
 
		var content = document.getElementById('ShareContent');
		//si la requete n'est pas terminée
		if (xhr.readyState != 4) {
			//on affiche le message d'erreur
			content.innerHTML = 'Le serveur ne répond pas, il est trop lent';  
			//on crash la requete
			xhr.abort();
		}
} 	
 
    }
 
    function alertContents(xhr) {
 
		var content = document.getElementById('ShareContent');
 
		if(xhr.readyState == 1){
			content.innerHTML = '<img src="loading.gif">';
		}
 
		if (xhr.readyState == 4) {
            if (xhr.status == 200) {
               content.innerHTML = xhr.responseText;
            } 
			else if (xhr.status == 404) {
				content.innerHTML = 'Le fichier n\'existe pas.';
			}
			else if (xhr.status == 500) {
				content.innerHTML = 'Erreur interne du serveur.';
			}
			else {
				content.innerHTML = 'Un problème est survenu avec la requête.';
			}
        }
 
    }
 
</script>
Ensuite voila les différentes choses que j'obtiens :
Sur Firefox :
erreur JS:
[Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: http://url/tests/cours/vraicours.html :: alertContents :: line 64" data: no]
[Break on this error] if (xhr.status == 200) {

Sur IE 7 :
affichage de ce message :
Un problème est survenu avec la requête.

Sur IE 6 :
affichage de ce message :
Un problème est survenu avec la requête.

Pour Internet explorer, malheureusement je ne peux pas afficher pour savoir s'il y a des erreurs JS, mais bon ce n'est pas le message que je souhaite obtenir. Je souhaite avoir "Le serveur ne répond pas, il est trop lent".
watchabongo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 17h33   #6
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 316
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2007
Messages : 9 316
Points : 15 522
Points : 15 522
Tu fais appel à l'objet xhr dans plusieurs fonctions.
Or il est déclaré en variable locale dans makeRequest(url) et ne doit donc être "visible" que dans cette fonction.
As-tu essayé de passer en global ?

Ca devrait résoudre certains des problèmes ...

A+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2008, 14h09   #7
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 88
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 88
Points : 14
Points : 14
C'est sûrement une bonne idée E.Bzz
malheureusement je n'arrive pas à la mettre en pratique, j'essaye de passer xhr en paramètre, marche pas. Je ne vois pas trop comment la passer en paramètre.

Si tu peux m'aider, merci d'avance.
watchabongo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2008, 14h13   #8
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 316
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2007
Messages : 9 316
Points : 15 522
Points : 15 522
Citation:
Envoyé par watchabongo Voir le message
C'est sûrement une bonne idée E.Bzz
malheureusement je n'arrive pas à la mettre en pratique, j'essaye de passer xhr en paramètre, marche pas. Je ne vois pas trop comment la passer en paramètre.
En globale, pas en paramètre.
Code :
1
2
3
4
5
6
7
8
9
<script type="text/javascript">
 
    var xhr = false;
 
    function makeRequest(url) {
 
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            xhr = new XMLHttpRequest();
.....
Comme elle est visible de partout, plus besoin de la passer en paramètre ...

A+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2008, 17h46   #9
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 88
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 88
Points : 14
Points : 14
Oui j'avais testé ça, malheureusement j'ai toujours l'erreur :

Sur Firefox :
[Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: http://url/tests/cours/vraicours.html :: alertContents :: line 61" data: no]
[Break on this error] if (xhr.status == 200) {

En fait ce qui est byzarre c'est qu'après qu'on est stopper la requette, son état passe à 4.

j'ai tenté de mettre un booléen mais du coup ça crée aussi des erreurs
watchabongo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 09h24   #10
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 316
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2007
Messages : 9 316
Points : 15 522
Points : 15 522
Tu as essayé de mettre le contenu de la fonction alertContents() directement dans onreadystatechange() ?

A+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 10h55   #11
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 88
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 88
Points : 14
Points : 14
Citation:
Envoyé par E.Bzz Voir le message
Tu as essayé de mettre le contenu de la fonction alertContents() directement dans onreadystatechange() ?

A+
je viens de le passer et j'ai toujours la même erreur JS :

[Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: http://url/tests/cours/vraicours.html :: anonymous :: line 41" data: no]
[Break on this error] if (xhr.status == 200) {
watchabongo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 11h03   #12
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 316
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2007
Messages : 9 316
Points : 15 522
Points : 15 522
La page que tu appelles est bien sur le même domaine ?

Sinon,
Code :
1
2
3
		if (xhr.readyState == 4) {
            alert(xhr.status);
...
donne quoi ?

A+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 11h29   #13
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 88
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 88
Points : 14
Points : 14
En fait j'ai une page qui récupère le contenu sur un autre domaine (donc sans ajax)

Et ensuite j'attaque ce fichier sur mon domaine en ajax, pour gérer des cas d'erreurs. Et je souhaiterai pouvoir gérer le cas ou le fichier met trop longtemps à répondre.

200 quand tout va bien

et rien pour mon fichier qui est trop lent à répondre.
mon fichier Asp qui est trop lent à répondre et que j'appelle :
Code :
1
2
3
4
5
6
<% 
maintenant = now()
while dateadd("s", 30, maintenant) > now()
wend
response.write "10 secondes plus tard"
%>
watchabongo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 11h50   #14
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 316
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2007
Messages : 9 316
Points : 15 522
Points : 15 522
Essaye d'enlever
Code :
1
2
3
4
5
	var content = document.getElementById('ShareContent');
 
		if(xhr.readyState == 1){
			content.innerHTML = '<img src="loading.gif">';
		}
J'ai lu qu'il y avait des problèmes avec les messages d'attentes (je les gère hors fonction Ajax).

Trouvé aussi ça:
Citation:
This happens when you have a XMLHttpRequest onerror handler in which you tried to read the result's status (or statusText) when that value is not available, usually meaning it was broken off, or it failed in a specific way.
En gros : il fat pas essayer de lire le status en cas d'erreur

A+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 15h30   #15
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 88
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 88
Points : 14
Points : 14
Bah j'ai testé ça ne change pas
toujours pareil.

En tout cas merci de m'aider.
watchabongo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2008, 14h27   #16
En attente de confirmation mail
 
Inscription : octobre 2003
Messages : 1 249
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 1 249
Points : 261
Points : 261
hello tout le monde,

moi aussi j'ai le problème

essaies ça (il faut que xhr soit défini en globale)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
// on annule la requete après 10 secondes
function abortRequest() {
 
		var content = document.getElementById('ShareContent');
		//si la requete n'est pas terminée
		if (xhr.readyState != 4) {
			//on affiche le message d'erreur
			content.innerHTML = 'Le serveur ne répond pas, il est trop lent';  
			//on crash la requete
                        xhr.onreadystatechange = null;
			xhr.abort();
		}
}
=> en fait, je crois que le problème vient que lorsqu'on fait un xhr.abort();, ça lance la fonction défini par onreadystatechange
Emcy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h05.


 
 
 
 
Partenaires

Hébergement Web