gpt4 book ai didi

javascript - 如何捕获传递给 jQuery 的回调中抛出的异常?

转载 作者:可可西里 更新时间:2023-11-01 02:05:57 28 4
gpt4 key购买 nike

我想捕获从传递给 jQuery 的回调中抛出的异常(无论是事件处理程序,如 click,还是 jqXHR 方法,如 thenalways )。

我确定了两个选项:

  • window.onerror 处理程序 - 这只是部分解决方案,因为它在我的目标平台之一 Android 上不受支持
  • 在每个单独的回调中处理异常 - 一点也不干!

我唯一能想到的另一件事是重写 jQuery 方法,但每当我升级 jQuery 时,这都会导致问题。对于 AJAX 处理程序,我可能会使用 $.ajaxSetup(根据对 Exceptions thrown in jQuery AJAX callbacks swallowed? 的回答),但我不确定这是否能让我捕获所有内容。

还有其他选择吗?

最佳答案

你可以像这样包装每个回调:

function cbWrapper(fn) {
return function() {
try {
return(fn.apply(this, arguments));
} catch(e) {
// handle all your exceptions here
}
};
}

因此,当您将回调传递给 Ajax 调用时,您传递的不是实际的回调,而是 cbWrapper(callback)

$.get(url, cbWrapper(myRealCallback));

或者内联匿名版本是这样的:

$.get(url, cbWrapper(function() {
// actual callback code here
}));

一个更高级的方法是用你自己的自动包装回调的实现覆盖 $.get(),但这变得很棘手,因为 jQuery 对实际参数非常灵活通过。正因为如此,并且因为您必须重写一个特定的参数才能使其工作,您将不得不复制它们的所有参数检测代码,这些代码确定存在哪些参数以及哪些对应于哪些实际函数参数。这段代码有点乱。它是可行的,而且可能不会破坏,因为如果 jQuery 破坏了它,那么现有的 jQuery 代码就会破坏,但它不是很干净。

如果都是你自己的代码,你可以制作你自己的 $.get() 版本,它在参数位置上不太灵活,然后切换你所有的代码来使用它而不是实际的$.get():

jQuery.fn.myGet = function(url, fn) {
return(jQuery.get(url, cbWrapper(fn)));
}

关于javascript - 如何捕获传递给 jQuery 的回调中抛出的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9613056/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com