2014-09-01 63 views
0

我敢肯定,我在這裏失去了一些東西,但無法弄清楚儘管我所有的搜索。坑正根據我的日誌刪除,但頁面上沒有任何反應。我必須手動刷新頁面才能顯示所做的更改。我是新手,在我的應用程序中使用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(「<%= j(render @pits);'似乎不完整的代碼.. – 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

回答

1

這是一個開始:

#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