спасибо, что прочитали этот пост. Я' Я застрял в проблеме с 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 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 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 (: partial =>" 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", "Authentity_token" => "MLuau4hvf dGO6FrYCzE0c0JzwHhHKZqjmV49U673sK8 = "," utf8 "=>" Γ £ ô "} Отрисовано home / _doit.html.erb (4,0 мс) Сделано home / doit.js.erb (9.0 мс) Завершено 200 OK за 807 мс (просмотров: 40,0 мс | ActiveRecord: 0,0 мс)
Я вижу как JS, и он говорит, что отображает мой js / partial. Однако я ничего не получаю в div my_list. Мой файл 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? Я ничего не знаю о синтаксисе всего, что начинается с $.
Еще раз спасибо за помощь, наконец-то чувствую, что я продвигаюсь в изучении рельсов. как начало объявить @Id integer объявить @DictamenId numeric (18,0) Я искал и нашел статью, упомянутую кем-то в комментарии ниже, но я не мог полностью понять объяснение в этой статье, поэтому я задаю этот вопрос.