спасибо за чтение этого сообщения. Последние несколько дней я застрял в проблеме с 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 (: 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 as JS Параметры: { "commit" = > "Найти", "url" = > "http://www.facebook.com/people/James-Stewart/653161299", "authenticity_token" = > "MLuau4hvf dGO6FrYCzE0c0JzwHhHKZqjmV49U673sK8 = "," utf8 "= > " Γ £ ô "} Представлено home/_doit.html.erb(4.0ms) Представлено home/doit.js.erb(9.0ms) Завершено 200 OK в 807ms (Просмотров: 40.0ms | ActiveRecord: 0.0ms)
Я вижу JS, и он говорит, что он отображает мой js/partial. Тем не менее, я ничего не получаю в div 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 script обратно в форму и удалить файл .js.erb и посмотреть, как это работает. Полагаю, я просто отрисовка частичного в ответе format.js? И где каждый находит информацию о написании файлов UJS? Я ничего не знаю о синтаксисе для чего-либо, начиная с $.
Снова спасибо за помощь, наконец, чувствую, что я продвигаюсь по обучению рельсов.