2013-02-17 17 views
10

'dan sonra bir Gönderi isteği gönderir Raja modelimin bir örneğini Ajax ile silmeye çalışıyorum.Raylar Ajax Jquery Sil

Bir düğmeyi tıklamak olur ve benim kod olarak aşağıda gösterilmiştir:

başarıyla silmek için am güçlü
$("#button").click(function(){ 
    $.ajax({ 
     type: "POST", 
     url: "/slot_allocations/" + slotallocation_id, 
     dataType: "json", 
     data: {"_method":"delete"}, 
     complete: function(){ 
      $("#SlotAllocationForm").dialog("close"); 
      alert("Deleted successfully"); 
     } 
    }); 
}); 

Ancak delete yöntem her zaman sunucuya bir post isteği ile takip edilmektedir Mevcut verilerle yeni bir model oluşturmak. Bunlar sunucunun istekleridir.

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 benim düğmeyi tıklamak olur. Bununla birlikte, neden #2 ve #3'un oluştuğundan emin değilim.

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

size 2 düğme görüntüsü üzerinde bulunmaktadır –

+0

düğmesi tanımlanır sizin bakış bölümünü (ve çevresindeki formu varsa) gönderebilir miyim ve

<%= f.submit %>
silin. Aşağıdaki kod ilk tuş içindir. –

+0

Gönder düğmesinin sorun olabileceğini ve onu kaldırmayı denediğini düşündüm ancak 2. gönderi işlemi hala gerçekleşti. –

cevap

21

Düğmenizi varsayarsak muhtemelen ajax isteği ateş ek olarak bu formu göndererek tıklamak tamamını, bir form içinde geçerli:

görünümünde iki düğme vardır.

Yapmak istediğiniz şey, formu gönderen düğmenin tıklatılmasıdır.

function(event) için function() parametreyi değiştirin

, daha sonra bir event.preventDefault() çağrıyı ekleyin: yerine

type: "DELETE" 

:

$("#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

Bir formun içinde idi ve bu mükemmel bir şekilde çalıştı. Teşekkürler! –

+3

Hayatımı 'data: {" _method ":" delete "}, ...' parçası ile kurtardınız. + 1'lediniz! –

+1

@ cassi.lup 'data: {" _method ":" delete "}' OP'nin sorusuydu. +1'iniz @ butter-beer'a gitmeli - sadece sayın. – user664833

6

kullanabilirsiniz

type: "POST" 

ve

kaldırmak
data: {"_method":"delete"} 
+0

[çoğu tarayıcı, form gönderirken "GET" ve "POST" dışındaki yöntemleri desteklemez] (http://edgeguides.rubyonrails.org/form_helpers.html#how-do-forms-with-patch, Bağlayın, -or-sil-yöntemler-iş-questionmark); Başka bir referans için, bkz. https://api.jquery.com/jquery.ajax/ ve arama * PUT ve DELETE gibi diğer HTTP istek yöntemleri de burada kullanılabilir, ancak bunlar ** tarafından desteklenmemektedir ** tüm tarayıcılar.* – user664833

+0

Bugünün tarayıcıları 'XMLHTTP' istekleri yapılırken 'PUT' /' DELETE'ü desteklemektedir. Ancak,

etiketi – illusionist

+1

etiketinde desteklenmeyebilir Benim durumumda: Veri ile POST: {"_method": "delete"} tam ihtiyacım olan şey. Ne zaman DELETE kullandığımı çalıştırdığınızda: "/ controller/member_id" anahtarını çalıştırın ve object_id ile nesneyi sildikten sonra başka bir istek başlattı: DELETE "/ controller" ve bu da bir No route hatası verdi. Bir düğme değil, bir form vardı. Bu anormalliğe neyin neden olduğunu bilmiyorum. – KaizenCodes