我有客戶端記錄器POST任何客戶端錯誤記錄到服務器。如何停止傳播ajaxerror事件
var logger = (function ($) {
var module = {};
module.log = function (obj) {
try {
$.ajax({
type: "POST",
data: JSON.stringify(obj),
url: '/jslog'
})
.fail(function (jqXHR, textStatus, errorThrown) {
console.error('JS error report submission failed.');
// how to stop progating ajaxError here?
})
}
catch (ex) {
console.error('JS error report submission failed.');
// how to stop progating ajaxError here?
}
}
return module;
})(jQuery);
然後在頁面上我附加了兩個事件處理程序。
- 處理任何Ajax錯誤
處理任何Java腳本錯誤
$(document).ajaxError(function (event, jqxhr, settings, thrownError) { logger.log({ jqxhr: jqxhr }) }); window.onerror = function (msg, url, line) { logger.log({ message: msg, url: url, line: line }) }
發行
的logger.log內部使用AJAX POST發送日誌服務器。所以如果日誌記錄本身失敗,它會再次觸發$(document).ajaxError
,這又會嘗試記錄錯誤並失敗等等。它持續循環。
有什麼方法可以停止傳播ajaxError
在catch
或fail
事件處理程序?
如果不是,那麼如何在不使用AJAX的情況下進行POST?
或有任何其他更好的方式來處理這個問題(不使用任何其它第三方的lib)