XML解析错误:在rails中使用rjs时未找到任何元素

时间:2011-10-04 17:15:16

标签: ajax ruby-on-rails-3

我在rails中使用rjs模板实现了destroy功能。当从数据库中销毁一条记录时,我收到错误“XML解析错误:找不到元素”。这是我的编码吗?

我使用了以下版本的ruby和rails:      Ruby版本:1.8.7      Rails版本:2.3.8

Controller file:

  def destroy
    begin
      @task = Task.find(params[:id])
      @task.destroy

      respond_to do |format|
      #format.html { redirect_to(tasks_url) }
      format.js
     format.xml  { head :ok }
      end
   rescue Exception => e
  puts e
  end

end

部分模板文件_task.html.erb:

<tr id="<%= dom_id(task) %>">
 <td><%= task.name %></td>
 <td><%= task.note %></td>
 <td><%= task.priority %></td>
 <td><%= link_to 'Show', task %></td>
 <td><%= link_to 'Edit', edit_task_path(task) %></td>
<td>
<%= link_to 'Destroy', task, :confirm => 'Are you sure?', :method =>:delete,:remote => :true %>      

    

index.rhtml文件:

<div id='newform'>
    <% form_for([@task, Task.new]) do |f| %>
<div>
  <%= f.label 'Add a new task: ' %>
  <%= f.text_field :name %>
</div>
<div>
  <%= f.submit %>
</div>
  <% end %>
</div>

<table id="alltasks">
<tr id="tablehead">
 <th>Name</th>
 <th>Note</th>
 <th>Priority</th>
 <th></th>
 <th></th>
 <th></th>
 </tr>

<%= render @tasks  %>
 <!-- expanded: render :partial => "task", :collection => @tasks -->
  </table>
  <br />
 <%= link_to 'New Task', new_task_path %>

destroy.js.rjs文件:

page.alert('Hi')

1 个答案:

答案 0 :(得分:0)

问题是xml格式是从你的destroy动作而不是js格式请求的,而且有些东西试图解析控制器中format.xml { head :ok }行产生的空xml响应。过去你可以使用空的xml响应,但它看起来像你正在使用不引人注目的javascript,并且ujs中的某些地方试图解析它。

一个可能的解决方案是创建一个destroy.xml.builder视图,生成一个简单的响应,并将您的控制器操作更改为读取format.xml { render :layout => false }或类似的东西。您也可以通过更改链接请求的数据类型来做一些有趣的事情,但我建议您避免使用它,除非您真的想在destroy.js.rjs中对您的js响应执行某些操作。