Почему бы вам просто не обернуть это в функцию отдельно?В конце концов, как вы в конечном итоге повторно использовать код.Вы даже можете передать функции в качестве аргументов, чтобы убедиться, что вам не придется повторять этот код более одного раза.
Для меня это довольно просто, но, возможно, я неправильно понял.
function xhr(success) {
$.ajax({
success: success,
error: function() {
$.ajax({ success: success })
}
});
}
Затем просто передайте обработчик успеха один раз
xhr(function(data){/*magic*/});
Или, если вы хотите вообще избежать избыточной конфигурации вызова ajax, используйте первый объект в качестве шаблона, например:
function xhr(success) {
var ajaxParams = { success: success };
ajaxParams.error = function() {
$.ajax($.extend(ajaxParams, { transport: 'xhr' }));
}
$.ajax(ajaxParams);
}
Я немного все упростил, но я надеюсь, что вы поняли.
Редактировать
Прочитав этот последний бит, возможно, это даст вам некоторые идеи ... это вариант этогопоследний фрагмент.
function xhr(success) {
var ajaxParams = { success: success };
ajaxParams.error = function() {
var newParams = $.extend(ajaxParams, { transport: 'xhr' });
newParams.success = function() {
// do something
// arguments is a special array, even if no parameters were
// defined in any arguments where passed they will be found
// in the order they were passed in the arguments array
// this makes it possible to forward the call to another
// function
success.apply(this, arguments);
}
$.ajax(newParams);
}
$.ajax(ajaxParams);
}