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 :

Gérer les erreurs AJAX provenant d'une classe PHP


Sujet :

AJAX

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2013
    Messages : 33
    Par défaut Gérer les erreurs AJAX provenant d'une classe PHP
    Bonjour,
    Je suis en train de m'entraîner sur AJAX et plus particulièrement sur la gestion des erreurs.
    J'essaye de faire remonter une erreur détectée par PHP (et provoquée) à l'AJAX

    Voici mon code :

    index.php
    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
     
    <!DOCTYPE html>
    <!--
    To change this license header, choose License Headers in Project Properties.
    To change this template file, choose Tools | Templates
    and open the template in the editor.
    -->
    <html>
        <head>
            <meta charset="UTF-8">
            <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
            <script src="javascript.js" type="text/javascript"></script>
            <title></title>
        </head>
        <body>
            <button id='comparaison' name='comparaison'>Comparaison</button>
            <?php
            require_once 'functions.php';
            $functions = new functions(10);
            
            if(isset($_POST['compare']) && $_POST['compare'] == 'ok')
            {
                $functions->compare(15);
            }
            else
            {
                echo 'Nan';
            }
            ?>
        </body>
    </html>
    functions.php
    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
     
    <?php
     
    class functions 
    {
        public function __construct($init) 
        {
            $this->init = $init;
        }
     
        public function compare($nombre)
        {
            try
            {
                if($this->init < $nombre)
                {
                    throw new Exception('Erreur');
                    die();
                }
            }
            catch(Exception $ex)
            {
                echo $ex;
            }
        }
    }
    javascript.js
    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
     
    $(function()
    {
        $('#comparaison').click(function()
        {
            $.post('index.php',
            {
                compare: 'ok'
            },
            function(data, status)
            {
                alert("Data: " + data + "\nStatus: " + status);
            });
        });
     
    });
    Selon la fonction compare de ma classe PHP, tout valeur entrée supérieure à la valeur de la variable en constructeur doit retourner une erreur, je n'ai fais cette classe juste pour m'entraîner
    dans l'alert dans mon javascript, l'erreur PHP est bien retournée : "exception 'Exception' with message 'Erreur' in C:\wamp\www\Fonctions\functions.php:16
    Stack trace:
    #0 C:\wamp\www\Fonctions\index.php(22): functions->compare(15)
    #1 {main}"

    Cependant, le status reste à success, et celà peut importe si PHP me retourne une erreur ou non

    Comment corriger cela ?
    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 414
    Par défaut
    Le status ajax retourne le status de la requête, c'est à dire si elle a été correctement effectué ou pas, mais c'est indépendant de ce que te retourne php. C'est le retour php que tu dois analyser pour afficher une erreur php, mais le status ajax sera toujours ok à moins que la requête se perde en cours de route.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2013
    Messages : 33
    Par défaut
    Merci, en fait je pensais que Ajax était capable de remonter une erreur provenant de PHP
    Finalement, j'ai pu me débrouiller

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 414
    Par défaut
    Bah suffit de faire un retour php dans un tableau json. Dans ce tableau tu fais une entrée "erreur" par exemple qui enregistre les erreur php que tu auras catchées et dans l'autre que tu peux nommer "resultat" tu peux mettre les autres réponses. Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $reponse = array();
     
    try
    {
        ...
    }
    catch(Exception $e)
    {
          $reponse["erreur"] = $e->getMessage();
    }
     
    $reponse["resultat"] = "autre retour php";
     
    exit(json_encode($reponse));
    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
    ...
    $.ajax({
    		url: mon_fichier.php,
    		type: "POST",
    		data: formData,
    		dataType: "json",
    })
    .done(function(reponse)
    {	
    	var resultat = reponse.resultat != undefined ? reponse.resultat : false;
    	var erreur_php = reponse.erreur != undefined ? reponse.erreur : false;
            if(erreur_php !== false)
           {
              //...
           }
     
           if (resultat !== false)
           {
             // ...
           }		
    })
    .fail(function(xhr, textStatus, errorThrown)
    {
         /* ici les erreurs de la requête ajax, c'est à dire si le serveur est en panne, 
    que la requête n'abouti pas, mais c'est indépendant de ce que retourne php, 
    excepté si c'est une erreur fatale. 
    Les erreurs fatales php peuvent être interceptées avec une fonction de Shutdown,  
    ainsi tu pourras faire afficher un message avec "xhr.responseText" 
    sinon "xhr.responseText" risque d'être vide.*/
    })

Discussions similaires

  1. [AC-2003] Gérer les erreurs en retour d'une requête
    Par denisw95 dans le forum VBA Access
    Réponses: 3
    Dernier message: 06/10/2009, 13h58
  2. gérer les erreurs dans une application web java
    Par flamant dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 22/06/2009, 12h10
  3. Gérer les boutons Minimize,Close d'une forme
    Par Chupakabra dans le forum Langage
    Réponses: 2
    Dernier message: 05/10/2005, 11h42
  4. Pouvoir gérer les actions des boutons dans une classe
    Par Cyborg289 dans le forum Composants
    Réponses: 2
    Dernier message: 08/07/2005, 12h08
  5. gérer les erreurs intebase avec delphi
    Par mondanikoffi dans le forum Bases de données
    Réponses: 1
    Dernier message: 14/12/2004, 15h46

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