Каким образом получить вызывающую функцию события ajaxError, созданного для отчетов об ошибках js?
Я создал приложение репозитория ошибок js с jQuery, и я могу обрабатывать обычные ошибки js, возникающие во всем мире, но у меня есть проблемы с ошибками ajax.
Я могу получить номер строки ошибки, когда это нормальная ошибка!
Я пытался поймать их с помощью одного из глобальных обработчиков ajax "ajaxError", но я не уверен, как получить номер строки этого вызывающего абонента ajax или имя вызывающего абонента.
пожалуйста, посмотрите на нижнюю часть!
const error_log_url = '/log';
const errorPost = function (data) {
$.ajax({
url: error_log_url,
type: 'post',
data: data,
success: function (res) {
console.log(res)
}, error: function (res) {
console.log(res)
}
})
}
window.addEventListener('error', function (e) {
let params = {
message: e.message || "Exception Handler",
url: e.filename || "",
lineno: e.lineno || 0,
colno: e.colno || 0
}
errorPost(params)
}, true);
// wrap function for new error stack with adding event to certain element
window.wrap = function (func) {
// make sure you only wrap the function once
if (!func._wrapped) {
func._wrapped = function () {
try {
func.apply(this, arguments);
} catch (exception) {
throw exception
}
}
}
return func._wrapped;
}
// override add & remove event listeners with above wrap function
let addEvenListener = window.EventTarget.prototype.addEventListener;
window.EventTarget.prototype.addEventListener = function (event, callback, bubble) {
addEvenListener.call(this, event, wrap(callback), bubble);
}
let removeEventLister = window.EventTarget.prototype.removeEventListener;
window.EventTarget.prototype.removeEventListener = function (event, callback, bubble) {
removeEventLister.call(this, event, callback._wrapped || callback, bubble);
}
$(document).ajaxError(function( event, jqxhr, settings, thrownError ) {
// please look at here, how can I get the caller name that produced this error!
console.log(arguments.callee.caller)
if (settings.url != error_log_url)
errorPost({
message: event.type,
filename: event.currentTarget.location.origin + settings.url
})
});
console.log (arguments.callee.caller) выводит ноль.
вы видите, я могу получить гораздо больше информации от ErrorEvent, но я не могу получить подробную информацию, такую как номер строки из события ajaxError!