2012-02-29 77 views
3

在服务器端(PHP)抛出的任何错误都会在哈希中捕获并通过AJAX发送回客户端(javascript)。通过这种方式,错误的JSON实际上被传递给AJAX成功事件。可能从Ajax成功事件中抛出新的错误?

... 
catch ($e) { 
    echo (array("error" => $e->getMessage())); 
} 

我基本上是检查数据[“错误”]是不确定的,如果没有,我想抛出一个新的错误,将理论上我try/catch块是将整个AJAX被抓住。

... 
success : function(data) { 
    if (typeof(data["error"]) != "undefined") { 
     throw new Error(data["error"]); 
    } 

    handleGoodData(data); 
} 

它一直告诉我错误未被捕获(通过Chrome控制台)。如果已经定义,我已经检查并且数据[“error”]返回一个字符串。

即使在最简单的形式,只需在成功事件抛出一个新的错误似乎不工作,要么:

success : function(data) { 
    throw new Error("error message!"); 
} 

回答

2

你有实际封装你的成功和错误功能尝试catch块,以便能够在其中发现错误。一种解决方案是在$ .ajax调用之间创建一个图层,以便它首先通过自己的函数。例如:

myajax: function(settings) { 

      // override provided success callback with try catch 
      if (settings.success){ 
       var successFunc = settings.success; 
       settings.success = function(){ 
        try{ 
         successFunc.call(arguments); 
        } 
        catch(error){ 
         console.log("An unhandled error occurred in ajax success callback: " + error); 
        } 
       }; 
      } 

      // override provided error callback with try catch 
      if (settings.error) { 
       var errorFunc = settings.error; 
       settings.error = function() { 
        try{ 
         errorFunc.call(arguments); 
        } 
        catch(error){ 
         console.log("An unhandled error occurred in ajax error callback: " + error); 
        } 
       }; 
      } 
      // else create our own basic error callback 
      else { 
       settings.error = function(jqXHR, textStatus, errorThrown) { 
        console.log("An unhandled error occurred during an AJAX call: " + errorThrown); 
       }; 
      } 


      $.ajax(settings); 
     } 
    }; 
+0

谢谢,通过try/catch工作处理另一个函数中的AJAX成功数据。 – kaspnord 2012-03-05 15:47:27

0

的问题是,jQuery的本身封装.ajax()程序的部分与try/catch块。所以我的猜测是你的错误会被其中一个块捕获。

您可以通过使用jQuery.error('error message!');

参考变通办法:jQuery.error

+0

我试过了,错误仍然没有被捕获在我的try/catch封装整个.ajax()。 – kaspnord 2012-02-29 16:26:29