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

jQuery Discussion :

Capture d'erreur pour .getJson


Sujet :

jQuery

  1. #1
    Membre très actif Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Par défaut Capture d'erreur pour .getJson
    Bonjour,
    Depuis quelques jours je tourne en rond sur Google, ebooks et les forums à chercher comment capturer l'erreur survenue suite à un appel à la fonction .getJson
    mon code est le suivant
    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
     
    <!DOCTYPE html>
    <html>
     
    <head>
       <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <script>
            $(document).ready(function () {
                REST_API_URL = "http://localhost:8080/Routing/sql" 
                $("button").click(function () 
                {
                    $.getJSON(REST_API_URL,
                                function (result) 
                                {
                                    alert("J'ai reçu quelque chose !");
                                }
                            )
                    .fail(function (xhr, textStatus, msg) 
                            {
                                alert("textStatus = " + textStatus);
                                alert("msg = " + msg);
                            }
                        );
                });
            });
        </script>
    </head>
    <body>
        <button>Get JSON data</button>
        <div></div>
    </body>
    </html>
    Mais je n'arrive pas à avoir le statut de la requête en erreur 404, 502, 403 ou autre, uniquement
    • textStatus = error
    • msg reste vide


    Merci d'avance de votre aide

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 625
    Par défaut
    essayez avec l'affichage de la console, vous aurez peut-être des retours sous forme d'objets avec plus d'informations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    .fail(function (xhr, textStatus, msg) 
        {
            console.log(xhr);
            console.log(textStatus);
            console.log(msg);
        }
    );

  3. #3
    Membre très actif Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Par défaut
    Bonjour,
    Merci de votre réponse, j'ai essayé d'afficher les informations dans la console, voilà ce que je vois

    Sous la console de I.E
    SCRIPT7002: XMLHttpRequest: Erreur réseau 0x2efd, Impossible d'effectuer l'opération à cause de l'erreur suivante 00002efd.
    Fichier*: nizar.html
    xhr : =>
    [object Object]
    {
    [functions]: ,
    __proto__: { },
    readyState: 0,
    responseJSON: undefined,
    status: 0,
    statusText: "error"
    }

    textStatus : =>
    error
    msg : =>


    Sous la console de chrome
    nizar.html:11 GET http://localhost:8080/Routing/sql net::ERR_CONNECTION_REFUSED
    send @ jquery.min.js:4
    ajax @ jquery.min.js:4
    r.(anonymous function) @ jquery.min.js:4
    getJSON @ jquery.min.js:4
    (anonymous) @ nizar.html:11
    dispatch @ jquery.min.js:3
    q.handle @ jquery.min.js:3
    nizar.html:19 xhr : =>
    nizar.html:20 Object {readyState: 0, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}abort: function (a)always: function ()catch: function (a)done: function ()fail: function ()getAllResponseHeaders: function ()getResponseHeader: function (a)overrideMimeType: function (a)pipe: function ()progress: function ()promise: function (a)readyState: 0responseJSON: undefinedsetRequestHeader: function (a,b)state: function ()status: 0statusCode: function (a)statusText: "error"then: function (b,d,e)__proto__: Object
    nizar.html:21 textStatus : =>
    nizar.html:22 error
    nizar.html:23 msg : =>
    nizar.html:24
    P.S : je ne suis qu'un débutant béta en JavaScript

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 625
    Par défaut
    ce n'est pas un soucis de JavaScript, ces erreurs indiquent qu'il n'y a pas de serveur à l'adresse http://localhost:8080/

  5. #5
    Membre très actif Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Par défaut
    Bonjour,
    et comment les capturer par programmation ? faire un try/catch ou autre ? il faut que je renvoi ces erreurs à l'utilisateur.

  6. #6
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Tu testes si status = 0. Ce n’est pas un cas d’erreur précis, tu ne peux pas faire la différence entre ces deux situations :
    • le serveur n’existe pas
    • la machine cliente a un problème de connexion

    Tiens compte de ça dans le message que tu adresses à l’utilisateur.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  7. #7
    Membre très actif Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Par défaut
    Donc il n'est pas possible d'avoir le code 404 ou 403 ou autre ?

  8. #8
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Citation Envoyé par tunizar Voir le message
    Donc il n'est pas possible d'avoir le code 404 ou 403 ou autre ?
    Confer le post de Mathieu :
    Citation Envoyé par mathieu Voir le message
    ce n'est pas un soucis de JavaScript, ces erreurs indiquent qu'il n'y a pas de serveur à l'adresse http://localhost:8080/
    404, 403, etc. sont des codes de réponse de serveur, et pour avoir une réponse, il faut qu’il y ait un serveur
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  9. #9
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 625
    Par défaut
    une idée pour faire la différence entre un serveur qui n'existe pas et un problème de connexion serait de tester plusieurs serveurs. et si aucun ne répond il est plus probable qu'il n'y ait pas de connexion

    mais ensuite ce manque de connexion peut venir d'un problème de routeur, modem, fournisseur d'accès, câble sous-marin mangé par un requin, etc.

  10. #10
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Citation Envoyé par mathieu Voir le message
    câble sous-marin mangé par un requin
    On devrait prévoir un code spécifique pour ça, c’est un problème grave et beaucoup trop sous-évalué.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  11. #11
    Membre très actif Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Par défaut
    Bonjour,
    Je veux simplement avoir le code d'erreur HTTP, 404 ça veut dire inaccessible que ça soit inexistant ou existant, je ne teste pas si un site existe.
    C'est la première fois que je code en JavaScript.
    Comment avoir le code 200, 502 , 403 ou autre, je ne veux pas statut =0
    Merci !

  12. #12
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 625
    Par défaut
    Citation Envoyé par tunizar Voir le message
    404 ça veut dire inaccessible que ça soit inexistant ou existant
    l'erreur 404 est une erreur retournée par le serveur donc si le serveur n'existe pas, il ne peux pas retourner de message d'erreur, d'où le "erreur = 0"

  13. #13
    Membre très actif Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Par défaut
    Bonjour,
    Le localhost existe.
    Il n y a pas à focaliser sur le 404 SVP.
    Tout simplement comment capturer tout les codes d'erreur HTTP ?

    J'ai trouvé ce lien qui fonctionne avec
    Comment le faire avec getJson ? SVP

  14. #14
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Je reprends le code de Mathieu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    .fail(function (xhr, textStatus, msg) 
        {
            console.log(xhr);
            console.log(textStatus);
            console.log(msg);
        }
    );
    Cette méthode te donne doublement accès aux codes et textes renvoyés par le serveur :
    • par le paramètre textStatus
    • par l’objet xhr qui a les propriétés status (le code) et statusText (le texte)


    Exemple :
    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
    $.getJSON(REST_API_URL)
      .fail(function (xhr, textStatus, msg) {
        switch (xhr.status) {
          case 404:
            alert('code 404: service introuvable');
            break;
     
          case 502:
            alert('code 502: problème de passerelle');
            break;
     
          case … :
            …
            break;
     
          case 0:
            alert('serveur inaccessible OU problème de connexion OU requête interdite');
            break;
     
          default:
            alert('cas d’erreur non géré');
            break;
        }
      });
    Note que tu as aussi accès à l’objet xhr (également nommé jqXHR) via les méthodes .done() et .always(). Je te renvoie à la doc de jQuery.ajax.

    Une dernière remarque : comme tu es en train de mettre en œuvre une interaction avec un service REST, tu vas probablement te retrouver à faire des requêtes cross-domain. Il faut savoir que dans ce cas les requêtes ajax natives sont interdites (bloquées par le navigateur) pour des raisons de sécurité, et que jQuery contourne le blocage en utilisant diverses stratégies (typiquement JSONP).

    Ce changement de stratégie se fait de manière transparente pour le développeur. Cependant, les propriétés ajax ne peuvent pas être émulées ; et comme indiqué dans la doc de jQuery.getJSON :
    However, since JSONP and cross-domain GET requests do not use XHR, in those cases the jqXHR and textStatus parameters passed to the success callback are undefined.
    Si jqXHR === undefined, cela indique que la requête a été faite cross-domain, et tu n’auras malheureusement pas accès aux codes HTTP.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  15. #15
    Membre très actif Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Par défaut
    Merci Watilin !
    Je testerai ça et je ferai un retour dessus.

Discussions similaires

  1. capture d'erreur dans un ksh pour oracle
    Par juin29 dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 22/06/2009, 15h51
  2. Erreur pour la création d'un XMLService
    Par jacma dans le forum XMLRAD
    Réponses: 13
    Dernier message: 25/07/2005, 23h26
  3. [C#]Erreur pour remplir mon dataset
    Par liliprog dans le forum Windows Forms
    Réponses: 16
    Dernier message: 15/07/2005, 19h03
  4. [DOM] Erreur pour valider une DTD
    Par lenghh dans le forum Format d'échange (XML, JSON...)
    Réponses: 13
    Dernier message: 19/05/2004, 18h15

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