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

JavaScript Discussion :

[AJAX] settimeout annuler requete


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 88
    Points : 44
    Points
    44
    Par défaut [AJAX] settimeout annuler requete
    Bonjour,
    J'ai un problème quand ma requete est trop longue.
    Je voudrai que si la requette n'a pas été effectuée en 5 secondes, on stop la requette et on affiche un message.

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

    fichier ajax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    <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('xhr')", 5000);.
    		setTimeout(abortRequest, 5000);
     
    // on annule la requete après 5 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
    			var i = 0;
    			xhr.abort();
    		}
    } 	
     
     
        }
     
        function alertContents(xhr) {
    		var content = document.getElementById('ShareContent');
    		if(xhr.readyState == 1){
    			content.innerHTML = '<img src="loading.gif">';
    			//alert('pause');
    			//alert(xhr.readyState);
    		}
     
    		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>
    <body onLoad="makeRequest('vraicours2.js');">
    <p class="access"><em>Texte</em></p>
    <div id="ShareCadre">
    <div id="ShareContent"></div>
    </div>
    <input type="submit" value="fichier lent test" onClick="makeRequest('vraicours2lent.asp');">
    <input type="submit" value="fichier test normal" onClick="makeRequest('vraicours2.js');">
    </body>
    fichier js
    fichier asp qui est lent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <% 
    maintenant = now()
    while dateadd("s", 10, maintenant) > now()
    wend
    response.write "10 secondes plus tard"
    %>

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 88
    Points : 44
    Points
    44
    Par défaut
    Personne ne peut m'aider sur mon souci ?

  3. #3
    Candidat au Club
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Petit Lien
    J'ai peut-être trouvé la réponse à ta question. J'ai moi aussi le même problème sauf que j'ai mis 'false' dans les propriétés du open. Résultat : le navigateur plante jusqu'à ce que le serveur apache réponde....
    J'ai trouvé ce lien, c'est en anglais mais le code est clair.
    http://www.ibm.com/developerworks/xm...-aj-async.html
    Regarde le premier cadre de code. Je vais essayer de le mettre en place, je te dirai si ça marche pour moi.

  4. #4
    Candidat au Club
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Voilà,
    J'ai utilisé ce qui était donné dans mon lien et ca marche nickel. Si tu as besoin d'aide pour le mettre en place, contacte-moi en message privés.
    Avant j'utilisais une fonction AJAX repiquée plutôt.... minimaliste... Mais celle-ci est particulièrement efficace.

Discussions similaires

  1. [MooTools] Ajax : 1 nouvelle requete en annule une autre
    Par Soundboy39 dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 15/10/2013, 12h12
  2. Ajax & Optimisation des requetes HTTP
    Par Spir dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/09/2008, 11h27
  3. [AJAX] Recharger une requete SQL via lien<a href>
    Par pinkdev dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/06/2007, 13h30
  4. [AJAX] settimeout qui attend pas assez
    Par zooffy dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 11/01/2007, 10h52
  5. [AJAX] Moins de requetes possibles sur un server. Ajax ou Php?
    Par trihanhcie dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/05/2006, 13h08

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