AJAX删除工作,但不能重新加载页面

AJAX删除工作,但不能重新加载页面

问题描述:

我敢肯定,我在这里失去了一些东西,但无法弄清楚尽管我所有的搜索。坑正根据我的日志删除,但页面上没有任何反应。我必须手动刷新页面才能显示所做的更改。我是新手,在我的应用程序中使用JS,所以这是我第一次使用它。谢谢。AJAX删除工作,但不能重新加载页面

我的日志说,这

Started DELETE "/pits/25" for 127.0.0.1 at 2014-09-01 00:20:45 -0500 
Processing by PitsController#destroy as JS 
    Parameters: {"id"=>"25"} 
    User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1 
    Pit Load (0.3ms) SELECT "pits".* FROM "pits" WHERE "pits"."user_id" = ? AND "pits"."id" = 25 LIMIT 1 [["user_id", 1]] 
    (0.1ms) begin transaction 
    ActsAsVotable::Vote Load (0.1ms) SELECT "votes".* FROM "votes" WHERE "votes"."votable_id" = ? AND "votes"."votable_type" = ? [["votable_id", 25], ["votable_type", "Pit"]] 
    SQL (28.1ms) DELETE FROM "pits" WHERE "pits"."id" = ? [["id", 25]] 
    (1.3ms) commit transaction 
    Rendered pits/destroy.js.erb (0.6ms) 
Completed 200 OK in 111ms (Views: 37.7ms | ActiveRecord: 30.2ms) 

索引视图

<div class = "container list-pits"> 
    <%= link_to "Add New Pit", new_pit_path, class: "btn btn-default" %> 
    <br> 
    <br> 
    <% @pit.each do |pit| %> 



    <div class = "container"> 
    <div class = "well pit-index"> 
     <h3 id="pit-title"><%= link_to pit.topic, pit_path(pit) %></h3> 
     <p>by <%= link_to pit.author, '#' %></p> 
      <br> 
      <p><%= pit.summary %></p> 
      <p>Replies (<%= pit.comments.count %>)</p> 
      <br> 

      <p>Pit Created by: <%= link_to pit.user.name, pit.user %> on <%= pit.created_at %></p> 

      <%= link_to "View Pit", pit_path(pit), class: "btn btn-primary" %> 


       <%= link_to pit_path(pit), remote: true, method: :delete, data: { confirm: 'Are you sure?' } do %> 
        <button class = "btn btn-primary">Delete!</button> 
        <% end %> 




     </div> 
    </div> 
     <% end %> 


</div> 

控制器动作

def destroy 
    @pit.destroy 
end 

destroy.js.erb

$('.pits').html("<%= j (render @pits); 
+1

'$('。pits')。html(“ RAJ 2014-09-01 05:28:33

+0

可能是这样的。我当时正在使用本教程作为一个指南 - http://www.gotealeaf.com/blog/the-detailed-guide-on-how-ajax-works-with-ruby -on-rails – 2014-09-01 05:29:42

+0

我从来没有在之前添加过这样的内容,因此目前 – 2014-09-01 05:30:12

这是一个开始:

#app/views/pits/destroy.js.erb 
$('.pits').html("<%= j (render @pits) %>"); 

JS

你提到你是第一次使用RoR的/阿贾克斯 - 让我给你如何得到这个工作的一些细节

首先,您似乎可以根据需要发送您的ajax请求。问题在于你如何捕获你创建的响应。我会在一分钟内解释ajax,但让我最初给你一个关于如何处理响应的方法

每次发送ajax请求时,您都会收到来自服务器的response。作为开发人员,这是你的工作,然后确保响应您的应用程序中处理

你必须记住阿贾克斯总是发送一个响应 - 你如何处理它是由你

-

在Rails中,有两种类型的Ajax响应,你可以使用:

  1. “标准” Ajax响应捕获
  2. 基于Rails的响应(使用views系统)

这些方法同样的事情两者(如下面我详细),这是他们如何一起工作是不同的。

“标准” Ajax响应可以让你捕捉&操纵Ajax调用本身的响应:

$.ajax({ 
    ... 
    success: function(data) { 
    ... 
    } 

这使您可以操纵来自服务器的“裸”反馈的能力,是最常见的使用Ajax。该系统的缺点是,你会能够使用您通过这个Ajax响应得到的数据(即没有Rails的数据,除非在Ajax响应定义可用)

使用的另一种方法Ajax是“Rails”方式(我不确定具体的术语)。基本上,它可以让你在后台,你的Rails的服务器将在views目录下渲染创建功能,允许您使用特定的Rails的方法:

#app/controllers/pits_controller.rb 
class PitsController < ApplicationController 
    respond_to :js, :html, only: :destroy 

    def destroy 
    @pit = Pit.find params[:id] 
    @pit.destroy 

    respond_with @pit 
    end 
end 

#app/views/pits/destroy.js.erb 
// you can use @pit here 
$('.pits').html("<%= j (render @pits) %>"); 

阿贾克斯

要简单为您解释Ajax - 这基本上是一种通过您的浏览器向您的后端服务器发送“伪请求”的方式:

enter image description here

为了让您对此有所了解,您必须明白HTTP protocol is stateless,这意味着您发送的每个请求都是服务器的“新”。当您发送Ajax请求,它只是启动与使用Javascript,该服务器的新请求,这将有交付给它的响应

您收到的响应取决于后端编码,但本质上给你送&接收数据超出了传统的HTTP请求范围。底线是ajax请求与标准请求是一样的,除非它是由Javascript提供的

+0

感谢Rich的另一个非常有用和彻底的回应。一旦我开始阅读答案,我甚至在看到你的名字之前就知道这是你的答案。再次感谢。 – 2014-09-02 03:35:43