Ruby On Rails 3, form_tag удаленно при ответе на запрос Ajax

спасибо, что прочитали этот пост. Я' Я застрял в проблеме с 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&amp;remote=true" method="post">
<div style="margin:0;padding:0;display:inline">
<input name="utf8" type="hidden" value="&#x2713;" />
<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) Я искал и нашел статью, упомянутую кем-то в комментарии ниже, но я не мог полностью понять объяснение в этой статье, поэтому я задаю этот вопрос.

234
задан Rob Bednark 31 January 2015 в 04:17
поделиться