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);
这是一个开始:
#app/views/pits/destroy.js.erb
$('.pits').html("<%= j (render @pits) %>");
JS
你提到你是第一次使用RoR的/阿贾克斯 - 让我给你如何得到这个工作的一些细节
首先,您似乎可以根据需要发送您的ajax
请求。问题在于你如何捕获你创建的响应。我会在一分钟内解释ajax,但让我最初给你一个关于如何处理响应的方法
每次发送ajax请求时,您都会收到来自服务器的response
。作为开发人员,这是你的工作,然后确保响应您的应用程序中处理
你必须记住阿贾克斯总是发送一个响应 - 你如何处理它是由你
-
在Rails中,有两种类型的Ajax响应,你可以使用:
- “标准” Ajax响应捕获
- 基于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 - 这基本上是一种通过您的浏览器向您的后端服务器发送“伪请求”的方式:
为了让您对此有所了解,您必须明白HTTP protocol is stateless,这意味着您发送的每个请求都是服务器的“新”。当您发送Ajax请求,它只是启动与使用Javascript,该服务器的新请求,这将有交付给它的响应
您收到的响应取决于后端编码,但本质上给你送&接收数据超出了传统的HTTP请求范围。底线是ajax请求与标准请求是一样的,除非它是由Javascript提供的
感谢Rich的另一个非常有用和彻底的回应。一旦我开始阅读答案,我甚至在看到你的名字之前就知道这是你的答案。再次感谢。 – 2014-09-02 03:35:43
'$('。pits')。html(“ RAJ 2014-09-01 05:28:33
可能是这样的。我当时正在使用本教程作为一个指南 - http://www.gotealeaf.com/blog/the-detailed-guide-on-how-ajax-works-with-ruby -on-rails – 2014-09-01 05:29:42
我从来没有在之前添加过这样的内容,因此目前 – 2014-09-01 05:30:12