Это может быть немного поздно, но в интересах всех, кто интересуется той же проблемой, я предложу следующее решение:
Для этого вы можете использовать собственную реализацию аспектно-ориентированного программирования в 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-запроса.