Ответ 1
Ха! Я нашел это описано в этой статье. В rails.js отмечены следующие обратные вызовы:
- ajax: загрузка: срабатывает перед выполнением запроса AJAX
- ajax: успех: срабатывает после успешного запроса AJAX
- ajax: complete: запускается после завершения запроса AJAX, независимо от состояния ответа
- ajax: сбой: вызван после неудачного запроса AJAX, в отличие от ajax: success
Поскольку javascript должен быть ненавязчивым, эта связь не выполняется в HTML.
Пример (с того же сайта): следующие Rails 2.3.8
<% form_remote_tag :url => { :action => 'run' },
:id => "tool-form",
:update => { :success => "response", :failure => "error" },
:loading => "$('#loading').toggle()", :complete => "$('#loading').toggle()" %>
переводится на это:
<% form_tag url_for(:action => "run"), :id => "tool-form", :remote => true do %>
и внутри некоторого javascript (application.js), вы связываете события
jQuery(function($) {
// create a convenient toggleLoading function
var toggleLoading = function() { $("#loading").toggle() };
$("#tool-form")
.bind("ajax:loading", toggleLoading)
.bind("ajax:complete", toggleLoading)
.bind("ajax:success", function(xhr, data, status) {
$("#response").html(status);
});
});
Отлично!:)
[UPDATE: 29/12/2011]
В последнее время были переименованы два события:
-
ajax:beforeSend
: заменить позднийajax:loading
-
ajax:error
заменяетajax:failure
(я предполагаю, что он больше соответствует самому jQuery)
Итак, мой пример:
$("#tool-form")
.bind("ajax:beforeSend", toggleLoading)
.bind("ajax:complete", toggleLoading)
.bind("ajax:success", function(xhr, data, status) {
$("#response").html(status);
});
Для полноты события и ожидаемые параметры:
.bind('ajax:beforeSend', function(xhr, settings) {})
.bind('ajax:success', function(xhr, data, status) {})
.bind('ajax:complete', function(xhr, status) {})
.bind('ajax:error', function(xhr, data, status) {})