使用异步ajax未捕获到Javascript错误

时间:2018-01-18 01:34:22

标签: javascript jquery ajax asynchronous

我是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响应中调用的方法中应该捕获的错误处理。

1 个答案:

答案 0 :(得分:0)

啊,我明白了。我最初没有编写这段代码所以我不知道发生的一切,但原因是抓住这些javascript错误的try / catch块在我的ajax调用之外。我的ajax调用只会引发错误。

因此,如果这是异步发生的,那么try catch将在我的错误被抛出之前执行。