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

Javascript AJAX删除工作但不重新加载页面,javascript,ruby-on-rails,ajax,destroy,Javascript,Ruby On Rails,Ajax,Destroy,我确信我在这里遗漏了一些东西,但尽管我一直在寻找,我还是不知道是什么。根据我的日志,Pit正在删除,但页面上什么也没有发生。我必须手动刷新页面以显示更改。我对在我的应用程序中使用JS还不熟悉,所以这是我第一次尝试。谢谢 我的日志上写着 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"=

我确信我在这里遗漏了一些东西,但尽管我一直在寻找,我还是不知道是什么。根据我的日志,Pit正在删除,但页面上什么也没有发生。我必须手动刷新页面以显示更改。我对在我的应用程序中使用JS还不熟悉,所以这是我第一次尝试。谢谢

我的日志上写着

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>
destroy.js.erb

$('.pits').html("<%= j (render @pits);
$('.pits').html(这是一个开始:

#app/views/pits/destroy.js.erb
$('.pits').html("<%= j (render @pits) %>");
这使您能够操纵来自服务器的“裸体”反馈,这是Ajax最常用的用法。此系统的缺点是,您只能使用通过Ajax响应获得的数据(即,除非在Ajax响应中定义,否则没有Rails数据可用)

使用Ajax的另一种方式是“Rails”方式(我不确定具体的术语)。它基本上允许您在后台创建功能,Rails服务器将在
视图
目录下呈现这些功能,允许您使用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) %>");
#app/controllers/pits_controller.rb
类PitsController<应用程序控制器
回复:js,:html,only::destroy
def销毁
@pit=pit.find参数[:id]
@毁灭
用@pit来回应你
结束
结束
#app/views/pits/destroy.js.erb
//你可以在这里使用@pit
$('.pits').html(“”);

Ajax

简单介绍一下Ajax——它基本上是一种通过浏览器向后端服务器发送“伪请求”的方法:

为了让您了解这一点,您必须了解,这意味着您向服务器发送的每个请求都是“新的”。当您发送ajax请求时,它只会使用Javascript向服务器发起一个新请求,并向服务器发送响应


您收到的响应取决于您的后端编码,但本质上允许您在传统HTTP请求范围之外发送和接收数据。底线是ajax请求与标准请求完全相同,只是它是通过Javascript(

$('.pits').html('可能是这样。我用这个教程作为一个指南-我以前从来没有添加过这个,所以现在有点混乱。对于重新加载页面,我建议你创建一个带有提交按钮的表单,然后触发提交按钮,转到表单的操作页面,而不是destroy.js.erb?我想该页面应该是这样的重定向。比如,然后让那个页面名为destroy.js?谢谢你的另一个非常有用和彻底的回复Rich。当我开始阅读答案时,我甚至在看到你的名字之前就知道是你。再次感谢。
$.ajax({
  ...
  success: function(data) {
     ...
  }
#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) %>");