2010-05-11 4 views
2

J'utilise JQuery pour appeler une fonction PHP qui renvoie une chaîne JSON en cas de succès ou qui lance des exceptions. Actuellement j'appelle jQuery.parseJSON() sur la réponse et si elle échoue je suppose que la réponse contient une chaîne d'exception.Gestion des exceptions PHP avec JQuery

 
$.ajax({ 
      type: "POST", 
      url: "something.php", 
      success: function(response){ 
       try { 
        var json = jQuery.parseJSON(response); 
       } 
       catch (e) { 
        alert(response); 
        return -1; 
       } 
       // ... do stuff with json 
      } 

Quelqu'un peut-il suggérer une façon plus élégante d'attraper l'exception?

Un grand merci, Itamar

Répondre

2

Eh bien, vous pouvez avoir un gestionnaire global d'exception en PHP qui appellerait json_encode sur elle l'écho alors dehors.

<?php 
    function handleException($e) { 
     echo json_encode($e); 
    } 
    set_exception_handler('handleException'); 
?> 

Vous pouvez ensuite vérifier si, par exemple, json.Exception != undefined.

$.ajax({ 
      type: "POST", 
      url: "something.php", 
      success: function(response){ 
       var json = jQuery.parseJSON(response); 
       if(json.Exception != undefined) { 
        //handle exception... 
       } 
       // ... do stuff with json 
      } 
0

Intercepter l'exception à la fin de PHP, et délivrer un message d'erreur au format JSON:

echo json_encode(array(
    'error' => $e->getMessage(), 
)); 
3

Intercepter l'exception dans votre script PHP - en utilisant un bloc try .... catch - et lorsqu'une exception se produit, ont la sortie du script d'un objet JSON avec un message d'erreur:

try 
    { 
    // do what you have to do 
    } 
catch (Exception $e) 
    { 
    echo json_encode("error" => "Exception occurred: ".$e->getMessage()); 
    } 

alors vous recherchez le message d'erreur dans votre script jQuery, et peut-être le sortir.

Une autre option serait d'envoyer un 500 internal server error-tête lorsque PHP rencontre une exception:

try 
    { 
    // do what you have to do 
    } 
catch (Exception $e) 
    { 
    header("HTTP/1.1 500 Internal Server Error"); 
    echo "Exception occurred: ".$e->getMessage(); // the response body 
                // to parse in Ajax 
    die(); 
    } 

votre objet Ajax invoquera alors la fonction de rappel d'erreur, et vous feriez votre erreur de manipulation là-dedans.

+0

Très utile! J'ai eu le même problème avec jQuery Ajax (La bibliothèque n'a pas attrapé mes exceptions levées de PHP). Envoyer l'en-tête avec le code 500 Http a résolu mon problème. Merci –

-1
echo json_encode(array(
    'error' => $e->getMessage(), 
));