спасибо за чтение этого поста. Последние несколько дней я застрял в проблеме с RoR. У меня есть форма в index.html.erb как:
<head>
<title>Ajax List Demo</title>
<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>
</head>
<body>
<h3>Add to list using Ajax</h3>
<% form_tag :action => :list , :method=>:get, :remote=>true do %>
Enter the public url:<%= text_field_tag 'url' ,'', :size => 80 %>
<%= submit_tag "Find" %>
<% end %>
<div id="my_list">
</div>
</body>
В контроллере у меня есть:
def list
puts "here!!!!"
reader = Reader.new
@profiles = reader.processURL(params[:url]) #profileList =
respond_to do |format|
#format.html { render :partial=>true, :locals => { :profiles => @profiles}}#{ render :partial=>'profiles/list',:layout => false, :locals => { :profiles => @profiles}}
format.js {render :content_type => 'text/javascript', :locals => { :profiles => @profiles}}
# index.html.erb
# format.rss render :partial=>'profiles/list',:layout => false, :locals => { :profiles => @profiles}
end
И JS-файл для удаленного UJS в виде list.js.erb
$("#my_list").html("<%= escape_javascript(render(:partial => "list"))%>");
Проблема в том, что я не могу получить результаты для отображения частичного _list.html.erb в теге div my_list. Я получаю пустую страницу, ошибка 406. Если я откомментирую HTML-код рендеринга в контроллере, я получу частичную обратную визуализацию в браузере. Я застрял, я хочу отправить форму и результаты, чтобы выскочить в div my_list. Я новичок в рельсах, поэтому, если я упускаю что-то очевидное, не стесняйтесь указывать мне на это ... Я определенно готов попробовать.
Изменил это на:
<html>
<head>
<title>Ajax List Demo</title>
<h1>Listing posts</h1>
<%= javascript_include_tag 'jquery.js' %>
<%= csrf_meta_tag %>
</head>
<body>
<h3>Add to list using Ajax</h3>
<% form_tag :action => :doit , :method=>:get, :remote=>true do %>
Enter the public url:<%= text_field_tag 'url' ,'', :size => 80 %>
<%= submit_tag "Find" %>
<% end %>
<div id="my_list">
</div>
Контроллер:
def doit
puts "here!!!!"
reader = Reader.new
@profiles = reader.processURL(params[:url])
respond_to do |format|
# format.html {render :partial=>true, :locals => { :profiles => @profiles}}#{ render :partial=>'profiles/list',:layout => false, :locals => { :profiles => @profiles}}
format.js #{render :content_type => 'text/javascript', :locals => { :profiles => @profiles}}
# index.html.erb
# format.rss render :partial=>'profiles/list',:layout => false, :locals => { :profiles => @profiles}
end
JS
_doit.js.erb
$ ("# my_list"). html ("<% = escape_javascript (render (:part =>" doit "))%>");
И, наконец, частичное:
_doit.html.erb.
Однако я все еще получаю ошибку 406, у меня нет дубликатов _doit js или erb. Что-то выделяется как неправильное из этого? Еще раз спасибо!
Еще одно обновление:
Я думаю, что форма не отображается правильно:
Это оказано:
<% form_tag :action => :doit , :remote=>true, :id => 'myform' do %>
Enter the public url:<%= text_field_tag 'url' ,'', :size => 80 %>
<%= submit_tag "Find" %>
<% end %>
Это:
<form accept-charset="UTF-8" action="/home/doit?id=myform&remote=true" method="post">
<div style="margin:0;padding:0;display:inline">
<input name="utf8" type="hidden" value="✓" />
<input name="authenticity_token" type="hidden" value="MLuau4hvfdGO6FrYCzE0c0JzwHhHKZqjmV49U673sK8=" />
</div> Enter the public url:
<input id="url" name="url" size="80" type="text" value="" />
<input name="commit" type="submit" value="Find" />
<input name="commit" type="submit" value="Find" />
Это добавление моего удаленного тега и идентификатора в строку запроса, не так ли?
Хорошо, наконец, есть подсказки, которые нужно заключить в скобки:
<%= form_tag( { :action => 'doit' }, :multipart => true, :remote=>true, :id => 'myform' ) do %>
Хорошо, последнее обновление сегодня вечером:
Теперь я получаю в логах:
Запущен POST "/ home / doit" для 127.0.0.1 в среду, 27 октября, 22:40:55 -0400 2010
Вот!!!!
Обработка HomeController # doit как JS
Параметры: {"commit" => "Find", "url" => "http://www.facebook.com/people/James-Stewart/653161299"," authenticity_token "=>" MLuau4hvf
dGO6FrYCzE0c0JzwHhHKZqjmV49U673sK8 = "," utf8 "=>" Γ £ ô "}
Rendered home / _doit.html.erb (4.0ms)
Rendered home / doit.js.erb (9.0ms)
Завершено 200 OK за 807 мс (Просмотров: 40,0 мс | ActiveRecord: 0,0 мс)
Я вижу как JS, и он говорит, что он делает мой JS / частичный. Однако я ничего не получаю на my_list div. Мой JS-файл:
$("#my_list").html("<%= escape_javascript(render(:partial => "doit"))%>");
Мой файл формы html.erb теперь имеет:
<script$('#myform').bind('ajax:success', function(evt, data, status, xhr){
xhr.responseText;
});></script>
Это похоже на то, что форма ничего не делает, что является хорошим признаком, не более 406 ошибок. Я знаю, что это близко, если кто-нибудь может указать, что мне нужно сделать в js, это было бы здорово, иначе я сделаю перерыв и попробую tmrw.
Хорошо, я думаю, что получение ответа обратно, а не рендеринг, как вы указали, было проблемой вчера, Стив.
Отладка JS в Firebug. Я вижу HTML, который я хочу отобразить в div, для этого:
http://localhost:3000/javascripts/prototype.js?1285674435/event/seq/1
Это означает, что я думаю, что теперь получаю ответ JS.
У меня есть это на странице формы:
<script>$('#myform').bind('ajax:success', function(evt, data, status, xhr){
$('#my_list').html(eval(xhr.responseText));
});</script>
Инспекции говорят, что он не знает, что такое myform, но я вставил: id => 'myform' в код Rails.
Опять же, спасибо, мне здесь очень помогли, и я хочу поделиться тем, как я наконец-то вернул это к сообществу.
Файл, js для метода doit (по умолчанию требуется лучшее имя действия контроллера) - doit.js
Код был в конечном итоге:
$("my_list").update("<%= escape_javascript(render(:partial => "doit"))%>");
По какой-то причине, оставив его как #my_list, не будет найдено в firefox, мне пришлось использовать firebug, чтобы наконец это выяснить.
Очевидно, что это отличается от способа, предложенного ниже, и я собираюсь поместить скрипт js обратно в форму, удалить файл .js.erb и посмотреть, как это работает. Я полагаю, я просто визуализирую частичное в ответе format.js? Кроме того, где все находят информацию о записи файлов UJS? Я ничего не знаю о синтаксисе для всего, что начинается с $.
Еще раз спасибо за помощь, наконец, чувствую, что я делаю успехи в изучении рельсов.