在服务器端(PHP)抛出的任何错误都会在哈希中捕获并通过AJAX发送回客户端(javascript)。通过这种方式,错误的JSON实际上被传递给AJAX成功事件。
...
catch ($e) {
echo ( array("error" => $e->getMessage()) );
}
我基本上检查数据[“error”]是否未定义,如果没有,我想抛出一个新错误,理论上会在我的try / catch块中捕获封装整个AJAX。
...
success : function(data) {
if (typeof(data["error"]) != "undefined") {
throw new Error(data["error"]);
}
handleGoodData(data);
}
它一直告诉我错误未被捕获(通过Chrome控制台)。我已经检查过,如果定义了数据,那么data [“error”]会返回一个字符串。
即使是最简单的形式,只是在成功事件中抛出一个新错误似乎也不起作用:
success : function(data) {
throw new Error("error message!");
}
答案 0 :(得分:2)
你必须在try 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);
}
};
答案 1 :(得分:0)
问题是,jQuery本身用.ajax()
块封装了try/catch
例程的部分内容。所以我的猜测是你的错误会被其中一个阻挡。
您可以使用jQuery.error('error message!');
参考:jQuery.error