Это может быть немного поздно, но для всех, кто интересуется той же проблемой, я предложу это решение:
Для этого можно использовать собственную реализацию аспектно-ориентированного программирования Prototypes. Конечно, вам придется изменить все ваши параметры onSuccess, но это можно сделать с помощью простого поиска и замены вместо обновления всех ваших функций обратного вызова. Вот пример создания Ajax.Request:
new Ajax.Request('example.html', {
parameters: {action: 'update'},
onSuccess: this.updateSuccessful
});
Скажем, у вас есть похожие фрагменты кода, разбросанные по всему вашему коду, и вы хотите, чтобы им всем предшествовала определенная функция, которая проверяет ответ до того, как фактическая функция будет запущена (или даже вообще не будет запущена). Используя Funtion.wrap, поставляемый в Prototype, мы можем сделать это, расширив приведенный выше код:
new Ajax.Request('example.html', {
parameters: {action: 'update'},
onSuccess: this.updateSuccessful.wrap(validateResponse)
});
Где «validateResponse» — это функция, подобная этой:
// If you use the X-JSON-header of the response for JSON, add the third param
function validateResponse(originalFn, transport /*, json */) {
// Validate the transport
if (someConditionMet) {
originalFn(transport /*, json */);
}
}
Таким образом, вы расширили свои onSuccess-функции в одном центральном месте, просто быстро найдя onSuccess и вставив в «wrap (validateResponse)». Это также дает вам возможность иметь несколько функций-оболочек в зависимости от потребностей конкретного Ajax-запроса.
person
Aleksander Krzywinski
schedule
11.05.2009