2010-05-11 99 views
2

我正在使用JQuery调用成功返回JSON字符串的PHP函数,或者引发一些异常。目前,我在响应中调用jQuery.parseJSON(),如果失败,我假设响应包含一个异常字符串。使用JQuery处理PHP异常

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

任何人都可以提出一个更优雅的方式来捕捉异常?

非常感谢, 伊塔马尔

回答

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 
      } 
0

捕捉JSON格式在PHP端以外,并输出一个错误消息:

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

捕捉异常在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对象将调用错误回调函数,你会做在那里处理您的错误。

+0

非常有用!我有与jQuery Ajax相同的问题(该库没有捕获我从PHP中抛出的异常)。使用500 Http代码发送标题已解决了我的问题。谢谢 – 2012-08-23 15:49:19

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