Обработка PHP-исключений с помощью JQuery - PullRequest
2 голосов
/ 11 мая 2010

Я использую JQuery для вызова функции PHP, которая возвращает JSON-строку в случае успеха или выдает некоторые исключения.В настоящее время я вызываю jQuery.parseJSON() в ответе, и если он терпит неудачу, я предполагаю, что ответ содержит строку исключения.

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

Может кто-нибудь предложить более элегантный способ перехвата исключения?* Большое спасибо, Итамар

Ответы [ 4 ]

3 голосов
/ 11 мая 2010

Перехватите исключение в вашем скрипте PHP - используя блок try .... catch - и, когда возникнет исключение, пусть сценарий выведет объект JSON с сообщением об ошибке:

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

Затем вы должны найти сообщение об ошибке в вашем скрипте jQuery и, возможно, вывести его.

Другой вариант - отправлять заголовок 500 internal server error, когда PHP встречает исключение:

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-объект затем вызовет функцию обратного вызова ошибки, и вы выполните там обработку ошибок.

2 голосов
/ 11 мая 2010

Ну, у вас может быть глобальный обработчик исключений в PHP, который будет вызывать json_encode и затем выводить его.

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

Затем вы можете проверить, скажем, 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 голосов
/ 10 декабря 2015
echo json_encode(array(
    'error' => $e->getMessage(),
));
0 голосов
/ 11 мая 2010

Перехватите исключение на стороне PHP и выведите сообщение об ошибке в формате JSON:

echo json_encode(array(
    'error' => $e->getMessage(),
));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...