开发者

XML Parsing Error: no element found when using rjs in rails

I implemented destroy functionality using rjs template in rails. i got an error "XML Parsing Error: no element found" when destroy one record from database. is this right my coding?

I used the following versions ruby and rails: Ruby version: 1.8.7 Rails Version: 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

partial template file _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 file:

<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>Not开发者_开发百科e</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 file:

page.alert('Hi')


The problem is that the xml format is getting requested from your destroy action, not the js format, and something is trying to parse the empty xml response produced by the format.xml { head :ok } line in the controller. It used to be that you could get away with the empty xml response, but it also looks like you're using unobtrusive javascript, and something somewhere in ujs tries to parse it.

One potential solution is to make a destroy.xml.builder view that produces a simple response, and change your controller action to read format.xml { render :layout => false } or something similar. You can also do some fun things with changing the data type your link is requesting, but I'd recommend avoiding that unless you really want to do something with your js response in destroy.js.rjs.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜