【问题标题】:Handling PHP exceptions with JQuery使用 JQuery 处理 PHP 异常
【发布时间】:2011-02-18 02:13:39
【问题描述】:

我正在使用 JQuery 调用一个 PHP 函数,该函数在成功时返回一个 JSON 字符串或抛出一些异常。目前我在响应上调用jQuery.parseJSON(),如果它失败了,我假设响应包含一个异常字符串。

$.ajax({ 类型:“发布”, 网址:“something.php”, 成功:函数(响应){ 尝试 { var json = jQuery.parseJSON(响应); } 抓住(e){ 警报(响应); 返回-1; } // ... 用 json 做事 }

谁能提出一种更优雅的方法来捕获异常?

非常感谢, 伊塔马尔

【问题讨论】:

    标签: php exception-handling jquery


    【解决方案1】:

    在您的 PHP 脚本中捕获异常 - 使用 try .... catch 块 - 当异常发生时,让脚本输出带有错误消息的 JSON 对象:

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

    然后,您将在 jQuery 脚本中查找错误消息,并可能将其输出。

    另一种选择是在 PHP 遇到异常时发送 500 internal server error 标头:

    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 对象将调用错误回调函数,您将在那里进行错误处理。

    【讨论】:

    • 非常有用!我在使用 jQuery Ajax 时遇到了同样的问题(该库没有捕获我从 PHP 抛出的异常)。发送带有 500 Http 代码的标头解决了我的问题。谢谢
    【解决方案2】:

    好吧,您可以在 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
                }
    

    【讨论】:

      【解决方案3】:

      在PHP端捕获异常,并以JSON格式输出错误信息:

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

      【讨论】:

        【解决方案4】:
        echo json_encode(array(
            'error' => $e->getMessage(),
        ));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-25
          • 2016-02-29
          • 2016-03-07
          • 2023-04-02
          相关资源
          最近更新 更多