JavaScript'的try-catch在类型错误上失败

JavaScript's try-catch is failing on typeerror

本文关键字:类型 错误 失败 try-catch JavaScript      更新时间:2023-09-26

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

Uncaught TypeError: jQuery11020382352269484832883_1441911920555 is not a function

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

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

当你使用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的名称。

小提琴链接