2013-02-17 42 views
10

後提交一條帖子請求我想用Ajax刪除我的Rails模型的一個實例。Rails Ajax Jquery Delete在

它發生在一個按鈕的點擊我的代碼如下所示:

$("#button").click(function(){ 
    $.ajax({ 
     type: "POST", 
     url: "/slot_allocations/" + slotallocation_id, 
     dataType: "json", 
     data: {"_method":"delete"}, 
     complete: function(){ 
      $("#SlotAllocationForm").dialog("close"); 
      alert("Deleted successfully"); 
     } 
    }); 
}); 

我能夠成功地將其刪除,但是delete方法總是由一個post請求到服務器跟進用現有數據創建新模型。這些是對服務器的請求。

1. POST http://localhost:3000/slot_allocations/1009 [HTTP/1.1 204 No Content 57ms]  
2. POST http://localhost:3000/slot_allocations [HTTP/1.1 302 Found 111ms] 
3. GET http://localhost:3000/slot_allocations/1010 [HTTP/1.1 200 OK 185ms] 

#1發生在我的按鈕上。但是,我不太確定爲什麼發生#2#3

有視圖中的兩個按鈕:

<button id="button">Delete</button> 
<div class="actions"><%= f.submit %></div> 
+0

您可以發佈視圖中定義按鈕的部分(以及周圍的表格,如果適用) – 2013-02-17 17:51:22

+0

視圖上有兩個按鈕

<%= f.submit %>
。以下代碼是針對第一個按鈕的。 – 2013-02-17 17:53:46

+0

我認爲提交按鈕可能是問題,並試圖刪除它,但第二後發生的事件仍然發生。 – 2013-02-17 17:58:56

回答

21

假設您的按鈕就是一個形式裏面,點擊它可能提交該表格除了射擊Ajax請求。

你想要做的是防止點擊提交表單的按鈕的默認動作。

function()參數更改爲function(event),然後添加一個event.preventDefault()電話:

$("#button").click(function(event){ 
    $.ajax({ 
     type: "POST", 
     url: "/slot_allocations/" + slotallocation_id, 
     dataType: "json", 
     data: {"_method":"delete"}, 
     complete: function(){ 
      $("#SlotAllocationForm").dialog("close"); 
      alert("Deleted successfully"); 
     } 
    }); 
    event.preventDefault(); 
}); 
+0

它在一個表單中,並且完美地工作。謝謝! – 2013-02-17 18:03:43

+3

您用'data:{「_method」:「delete」},...''部分保存了我的生活。 +1! – 2013-05-07 12:50:20

+1

@ cassi.lup'data:{「_method」:「delete」}'在OP的問題中。你的+1應該去@黃油啤酒 - 只是說'n。 – user664833 2014-08-12 22:33:57

6

您可以使用:

type: "DELETE" 

代替:

type: "POST" 

,並刪除

data: {"_method":"delete"} 
+0

[大多數瀏覽器在提交表單時不支持「GET」和「POST」以外的方法](http://edgeguides.rubyonrails.org/form_helpers.html#how-do-forms-with-patch, -put, - 或刪除的方法,工作問號);作爲另一個參考,請參閱https://api.jquery.com/jquery.ajax/並搜索*其他HTTP請求方法(例如PUT和DELETE)也可以在此處使用,但它們不受**所有瀏覽器。* – user664833 2014-08-12 22:51:30

+0

今天的瀏覽器在製作XMLHTTP請求時支持'PUT' /'DELETE'。但它可能不支持

標籤 – illusionist 2015-07-13 08:10:40

+1

在我的情況下鍵入:帶有數據的POST:{「_method」:「delete」}就是我所需要的。當我使用DELETE時發生了什麼:DELETE「/ controller/member_id」,並刪除了member_id對象,但它啓動了另一個請求:DELETE「/ controller」,並引發了一個No route錯誤。這是一個鏈接,不是一個按鈕,但它是一種形式。我不知道是什麼導致了這種異常。 – KaizenCodes 2015-09-03 08:07:50