【发布时间】:2018-06-27 00:13:28
【问题描述】:
我是 ajax 和 javascript 的新手,我有点困惑,为什么当我的 ajax 调用是异步的时我的错误没有被捕获。
我已经查看了这个问题 (Catch statement does not catch thrown error),但我已经在调用我的函数,该函数在 Ajax 的成功块中捕获了我的错误。
我的代码如下所示:
var Codecheck = {
SundayCheck : function() {
this.check = function (date, boolean) {
if (boolean) return; //skip check
else{
...logic to check if sunday
if(!Sunday)
throw new Error
}
}
}
checkSunday : function(title) {
$.ajax({
url : url,
type : 'GET',
dataType: 'json',
contentType : 'application/json;charset=UTF-8',
async: false,
success : function(response) {
if (response.content == 'checkSunday') {
new Codecheck.SundayCheck().check(date, true);
}
else {
new Codecheck.SundayCheck().check(date, false);
}
},
error : function(response) {
document.write(response.responseText);
}
});
这工作正常,我的错误被捕获。但是,一旦我删除了 async: false,就不再捕获该错误。我正在调用我的检查方法,因此在 ajax 的成功块中捕获了我的错误,所以我不确定发生了什么。
我唯一能想到的就是调用我的 checkSunday 函数的任何东西,如果是异步调用,则假设之后运行的代码将运行,而如果是同步调用,则代码将等待。
但是,这仍然没有解释应该在仅在成功的 ajax 响应时调用的方法中捕获的错误处理如何不被调用,无论同步还是异步。
【问题讨论】:
-
抛出的错误在哪里?错误是什么?
-
抱歉,我已经更新了我的代码块以使其更清晰。错误是在成功块内 ajax 调用的方法中抛出的。
-
顺便说一句,您在
Codecheck中定义了CheckSunday和checkSunday,但调用Codecheck.checksunday或Checkers.checksunday- 所以没有真正的迹象表明您的成功函数将调用什么代码 -
我很确定
error参数应该为失败的 http 响应保留,而不是错误抛出。如果你异步运行它,它会在你使用throw new Error时模拟失败 -
@JaromandaX 对不起,我很快就为这个问题制作了一个原型代码。我更新了我的问题,但在真正的代码中,它并不是那么模棱两可/我的实际代码中没有错字。
标签: javascript jquery ajax asynchronous