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