我是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响应中调用的方法中应该捕获的错误处理。
答案 0 :(得分:0)
啊,我明白了。我最初没有编写这段代码所以我不知道发生的一切,但原因是抓住这些javascript错误的try / catch块在我的ajax调用之外。我的ajax调用只会引发错误。
因此,如果这是异步发生的,那么try catch将在我的错误被抛出之前执行。