在JS中捕获异常

时间:2015-01-28 14:00:18

标签: javascript

我已经有了下一个代码,用10秒从服务器获取的数据填充页面:

var refreshFunction = function() {
        //get data from server
        $.get("<c:out value="${baseURL}"/>/js/getCounts", function(data) {
            vardata = data;
        });

        if (vardata != null) {
            //divide
            countArray = vardata.split("/");
            //if server returns "-" or new array with new structure
            if ((vardata == "-" || length != countArray.length)
                    && !(document.getElementById('requestForm') instanceof Object)) {
                //reload
                location.reload();
                clearInterval(refreshId);
            } else {

                //fill page with data
                for (var j = 0; j <= countArray.length; j++) {
                    console.log(countArray[j]);
                    $('#badge_' + (j + 1)).text(countArray[j]);
                }

            }
        }

    };

    $(document).ready(function() {
        refreshId = setInterval(refreshFunction, 10000);
    });

代码有效,但如果我打开应用程序然后关闭我的服务器,脚本将永远不会停止。我有

  

无法加载资源:net :: ERR_CONNECTION_REFUSED

我怎样才能抓住它并在那之后停止脚本?我试图用trycatch(e)包装代码块,但没有帮助。

1 个答案:

答案 0 :(得分:2)

由于AJAX请求是异步执行的,因此将代码包装在try ... catch中将不会捕获异常。在代码完成执行后发生异常。

您应该对$.get返回的对象处理.fail个案,以避免在控制台上看到该错误:

 var jqxhr = $.get("<c:out value="${baseURL}"/>/js/getCounts", function() {
    vardata = data;
  })
  .done(function() {
    alert( "second success" );
  })
  .fail(function() {
    alert( "error" );
  })
  .always(function() {
    alert( "finished" );
  });

作为旁注,您应该将函数的完整正文放在$.get中的回调中。否则,您将始终使用数据集运行代码,而不是新代码。

在第一次执行时,您的代码中没有显示此问题,因为vardata可能是undefined,而在Javascript中,undefined != nullfalse。< / p>