Я хочу начать использовать события Ajax: ajax: success, ajax: fail, ajax: complete и ajax: beforeSend, как рекомендовано для ненавязчивого Javascript в сообщениях вроде:
Но по какой-то причине это не работает для меня. Я что-то упускаю (что-то маленькое), так как не могу заставить события запускать мой Javascript. Я надеюсь, что кто-то может обнаружить «очевидную» ошибку / упущение в моем коде.
Некоторые подробности о моей среде:
- Рельсы 3.1
- jQuery (драгоценный камень jquery-rails)
- therubyracer для обработки js на стороне сервера (для моего примера это не так важно)
Чтобы попытаться решить, чего мне не хватает, я создал простое тестовое приложение, в котором есть одна кнопка для удаленного доступа. Когда кнопка нажата, я хочу, чтобы блоки оповещений срабатывали. Код этого приложения можно увидеть на github здесь:
http://github.com/jpmcgrath/rbtest
Я развернул приложение к героку здесь:
http://rbtest.heroku.com/projects/
Если вы посмотрите на приложение, вы можете нажать кнопку, и кнопка успешно создаст новый проект (чтобы увидеть его обновление вручную), но ajax: событие успеха, похоже, не произошло?
Суть кода в следующем:
In projects_controller.rb
def remote_test
@project = Project.new(:name => "remote test")
respond_to do |format|
if @project.save
puts "project saved!\n\n\n"
format.html { redirect_to @project, notice: 'Project was successfully created.' }
format.json { render json: @project, status: :created, location: @project }
else
format.html { render action: "new" }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
В приложении. Js
jQuery(document).ready(function() {
jQuery(".remote_button").click(function() {
alert('Handler for .click() called.');
})
.bind("ajax:complete", function() {
alert('complete!');
})
.bind("ajax:beforeSend", function () {
alert('loading!');
})
.bind("ajax:error", function (xhr, status, error) {
alert('failure!');
})
.bind('ajax:success', function(event, data, status, xhr) {
alert('success!');
});
});
В представлении projects / index.html.erb
<%= button_to "remote test", remote_test_path, :remote => true, :class => 'remote_button' %>
Если бы кто-то мог указать, что мне не хватает (я подозреваю, что это как-то связано с типом ответа), это было бы очень признательно.