JavaScript的try-catch在typeerror

时间:2015-09-11 03:53:53

标签: javascript jquery try-catch

今天在我们的应用程序中看到了这个错误。我们在网页的右上角有一个小方框。它每分钟都会更新。它的作用是通过内联网向我们的每个医院合作伙伴发出jsonp呼叫并提取最新消息。这个问题并不经常发生。我实际上发现了错误发生的原因。

Uncaught TypeError: jQuery11020382352269484832883_1441911920555 is not a function

当jsonp请求在jsonp超时指定的时间内没有从jsonp服务获得响应时,此错误会显示在控制台中。

我用try-catch包装了我们的端点调用,但它仍在吐出该错误。我想摆脱" Uncaught TypeError"并显示我们自己的自定义错误。

1 个答案:

答案 0 :(得分:1)

当您使用jQuery并且http请求是异步时,您无法使用try-catch处理此类错误,这将仅捕获请求调用的错误,而不是整个进程。

一些研究给了我这个链接:http://bugs.jquery.com/ticket/8744

实际上,当请求超时时,不应该调用jsonpCallback函数,它似乎是一个浏览器错误:http://bugs.jquery.com/ticket/8744#comment:2 https://bugzilla.mozilla.org/show_bug.cgi?id=707154

jQuery bug支持(e.marin.izquierdo)中的某个人提供了一个可能的解决方案来处理"处理"这个错误。 (我改变它有点删除不相关的东西)

var auxTime = new Date();
var jQueryCallbackRandom = auxTime.getTime();

var callParameters = {
    url: 'http://jsfiddle.net/echo/jsonp/',
    timeout: 5,
    dataType: "jsonp",
    data: { echo: "Hello World!" },
    jsonpCallback: "jQueryRandom_" + jQueryCallbackRandom,
    success: function(){
        console.log("success");   
    },
    error: function(jqXHR, textStatus){
        console.log("failed with error: " + textStatus);
        window["jQueryRandom_" + jQueryCallbackRandom] = function() {
            window["jQueryRandom_" + jQueryCallbackRandom] = null;
        };
    }       
};

$.ajax(callParameters);

它在错误监听器中创建jsonpCallback以避免错误,但要执行此操作,您需要知道jsonpCallback的名称。

Fiddle link