Не могу отправить 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();
});

0 ответов

Другие вопросы по тегам