Ответ 1
Вы можете обернуть каждый обратный вызов следующим образом:
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)));
}