gpt4 book ai didi

javascript - 可能从 Ajax 成功事件中抛出新错误?

转载 作者:行者123 更新时间:2023-11-29 15:01:31 25 4
gpt4 key购买 nike

在服务器端 (PHP) 抛出的任何错误都被捕获在哈希中,并通过 AJAX 发送回客户端 (javascript)。这样,错误的 JSON 实际上传递给了 AJAX 成功事件。

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

我主要检查 data["error"] 是否未定义,如果没有,我想抛出一个新错误,理论上会在封装整个 AJAX 的 try/catch block 中捕获。

...
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!");
}

最佳答案

您必须将成功和错误函数实际封装在 try catch block 中,以便能够捕获其中的错误。一种解决方案是在 $.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);
}
};

关于javascript - 可能从 Ajax 成功事件中抛出新错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9502696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com