JavaScript'的try-catch在类型错误上失败
JavaScript's try-catch is failing on typeerror
今天在我们的应用程序上看到了这个错误。我们在网页的右上方有一个小框。它每分钟都在更新。它的功能是通过内部网向我们的每个医院合作伙伴发出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
的名称。
小提琴链接
相关文章:
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- 未捕获的类型错误:无法读取属性'删除'的未定义
- 未捕获的类型错误:无法读取属性'name'即使它存在,也无法定义
- 看到“;未捕获的类型错误:无法读取属性'weight'未定义的“;尽管按照字面上的指示
- Soundcloud api"未捕获的类型错误:无法读取属性'uri'“未定义”;
- 未捕获的类型错误:无法读取属性'addEventListener'的null chrome扩展名
- 如何解决这种情况下的非法调用类型错误
- 未捕获的类型错误:$(..).dataTable不是函数
- 未捕获的类型错误:无法读取属性'状态'在react中为null
- 未捕获的类型错误:topFrame.window.changeSelectedBarStyle不是函数,原因是什么
- 类型错误:url未定义extjs 4正在填充组合框
- 未捕获的类型错误:无法读取属性'中止'的未定义
- 类型错误'未定义'不是对象(正在评估'navigator.connection.type'
- 未捕获的类型错误:无法设置属性'innerHTML'如果为null,则将脚本移动到正文不会;不起作用
- 未捕获的类型错误:undefined不是函数$
- 输入类型文件的未捕获类型错误
- 未捕获的类型错误:无法设置属性'背景'的未定义
- "未捕获类型错误/丢弃意外“;因为一句台词而出现?(HTML w/<脚本>)
- Javascript未捕获类型错误:无法读取属性'0'的未定义