Не могу отправить ajax-запрос из form_tag
Я пытаюсь отправить запрос ajax из тега формы, но запрос XHR не отправляется. Если я делаю то же самое по ссылке, все работает отлично.
Вот вид, из которого я могу отправить запрос по ссылке или из формы:
<div id="request_test">
<%= link_to "test", explorer_test_path(:format => :js), :remote => true %>
<%= form_tag explorer_test_path(:format => :js), :id => "testform", :remote => true, :method => :get do %>
<%= submit_tag "Send test request"%>
<% end %>
</div>
<div id="response_test"></div>
Затем в моем контроллере я проверяю, является ли это запросом XHR или нет, и затем отображаю javascript, отвечающий на запрос ajax:
def test
if request.xhr?
logger.debug "xhr"
else
logger.debug "not xhr"
end
respond_to do |format|
format.js
end
end
Мой test.js.erb очень прост:
$("#response_test").html("<b>hi</b>");
В результате, если я нажимаю на ссылку, я получаю искомое поведение, то есть, что div response_test читает "привет". Если я отправляю форму, я просто получаю javascript в test.js.erb, записанный в виде строки, и журнал сервера, сообщающий, что форма не отправила запрос XHR. Если я отлаживаю все это в firebug, я получаю тот же результат, ссылка отправляет запрос ajax, отправленная форма - нет. В обоих случаях моя консоль сообщает мне, что сервер обрабатывает запрос как JS, поэтому проблем с типом данных не должно быть.
Запуск Rails 3.0.4 с помощью jquery UJS.
Благодарю за любые подсказки о том, в чем может быть проблема, я пытался выяснить это довольно давно, но, поскольку я относительно новичок в Rails, я подозреваю, что мне не хватает чего-то базового.
ОБНОВЛЕНИЕ: Добавление следующего javascript из ( http://www.alfajango.com/blog/rails-jquery-ujs-now-interactive/) устраняет проблему, которая предполагает, что:remote => true в моем теге формы isn' не найдены или правильно интерпретированы jquery ujs. Я рассматриваю это как обходной путь, а не постоянное исправление, поэтому, если кто-нибудь и поймет, что не так в моем исходном коде, я был бы очень благодарен.
$('#testform').live('submit', function(e) {
$.rails.handleRemote( $(this) );
e.preventDefault();
});