JQuery ile Taşıma PHP istisnalar

3 Cevap php

Ben başarısı üzerine bir JSON dize döndürür ya da bazı istisnalar atar bir PHP işlevi çağırmak için JQuery kullanıyorum. Şu anda yanıtta jQuery.parseJSON() arıyorum ve başarısız olursa ben yanıt bir istisna dize içeren varsayalım.

$.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
            }

Herkes durum yakalamak için daha şık bir yol önerebilirsiniz?

Many thanks, Itamar

3 Cevap

Peki, bunu echo ardından json_encode üzerinde çağırır PHP küresel bir istisna eylemcisi olabilir.

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

Daha sonra diyelim ki, kontrol, json.Exception != undefined. Olabilir

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

Bir try .... catch bloğu kullanarak - - PHP komut durum yakalamak ve bir durum oluştuğunda, bir hata mesajı ile komut çıkışını bir JSON nesnesi vardır:

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

Eğer jQuery komut hata iletisine bakmak, ve muhtemelen çıkış olacaktır.

Başka bir seçenek PHP bir istisna karşılaştığında bir 500 internal server error başlık göndermek olacaktır:

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();
  }

Ajax nesne daha sonra hata arama işlevini çağırır ve orada da hata işleme yapardı.

PHP ucunda durum ve çıktı JSON biçiminde bir hata mesajı yakalamak:

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