Ха!Я нашел это описанным в этой статье.В rails.js проверяются следующие обратные вызовы:
- ajax: загрузка: срабатывает до выполнения запроса AJAX
- ajax: success: срабатывает после успешного запроса AJAX
- ajax: complete: срабатывает после завершения запроса AJAX, независимо от состояния ответа
- ajax: fail: fail: срабатывает после неудачного запроса 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);
});
});
Отлично!:)
[ОБНОВЛЕНИЕ: 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) {})