2014-01-23 2 views
1

Я часто использую Ajax запрос для такого рода:Как наследовать от JQuery ajax?

$.ajax({ 
    done : function() { 
       alert("success"); 
    }, 
    fail : fonction() { 
       alert("error"); 
    } 
}) 

Для одного моего проекта я хочу, чтобы создать какое-то действие по умолчанию для каждого запроса AJAX, и мне интересно, как я могу реализовать его с наследованием JavaScript.

Как я хотел бы это выглядит:

// Definition of the custom and global object in order to override some basic ajax options. 
MyCustomAjaxObject = new $.ajax(); 
MyCustomAjaxObject.error(function() { /* some code for a default */}); 

// Further in the code, at the moment to trigger one of the ajax request 
foo = new MyCustomAjaxObject({ 
    url : myDestination, 
    data : someData 
}); 

Вы знаете, если это возможно, использовать наследование этого рода с JavaScript?

+2

Был бы ['$ (document) .ajaxError()'] (http://api.jquery.com/ajaxError/) и [связанный eve nts] (http://api.jquery.com/category/ajax/global-ajax-event-handlers/) достаточно? –

+0

@JonathanLonowski это может быть хорошо, есть ли аналогичный способ настройки url или dataType? – Fractaliste

+1

Вы можете использовать ['jQuery.ajaxSetup()'] (http://api.jquery.com/jQuery.ajaxSetup/) для установки глобальных значений по умолчанию для (большинства) '$ .ajax()' свойств. (Рекомендуется использовать '.ajaxError()' и т. Д. Для привязки события.) –

ответ

2

$.ajax(), так как он не предназначен для использования в качестве конструктора, поэтому наследование, вероятно, не будет легко выполнять то, что вы хотите.

Вы можете создать оболочку для того, чтобы модифицировать options или в результате $.Deferred по желанию:

// A) default handler 
function customAjax(options) { 
    if (!options.error) options.error = function() { 
     // ... 
    }; 
    return $.ajax(options); 
} 
// B) always-in-queue handler 
function customAjax(options) { 
    return $.ajax(options).error(function() { 
     // ... 
    }); 
} 

И, если вам просто нужно, чтобы захватить АЯКС события в целом, JQuery действительно включает global event bindings :

$(document).ajaxError(function() { 
    // ... 
}); 
+0

Это очень хорошая идея. Знаете ли вы, можно ли «сохранить» обратный вызов 'options.error', чтобы создать новый, и в него выполнить * сохраненный *. Я отредактировал свой вопрос, чтобы объяснить это. – Fractaliste

+0

Спасибо за вашу помощь, ваша идея была хорошей, и мне удалось добиться того, что я пытался сделать. – Fractaliste

Смежные вопросы