2013-02-17 36 views
10

के बाद एक पोस्ट अनुरोध सबमिट करें मैं अजाक्स के साथ अपने रेल मॉडल का एक उदाहरण हटाने की कोशिश कर रहा हूं।रेल अजाक्स Jquery हटाएं

यह एक बटन क्लिक पर होता है और मेरे कोड के रूप में नीचे दिखाया गया है:

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

क्या आप अपने दृश्य का हिस्सा पोस्ट कर सकते हैं जहां बटन परिभाषित किया गया है (और लागू होने पर आस-पास का फॉर्म) –

+0

दृश्य पर 2 बटन हैं <बटन आईडी = "बटन"> और

<%= f.submit %>
हटाएं। निम्नलिखित कोड पहले बटन के लिए है। –

+0

मैंने सोचा कि सबमिट बटन समस्या हो सकती है और इसे हटाने का प्रयास किया लेकिन दूसरी पोस्ट कार्रवाई अभी भी हुई। –

उत्तर

21

अपने बटन मानते हुए, एक रूप के अंदर है यह शायद ajax अनुरोध फायरिंग के साथ ही उस पर्चे को जमा किया जाता है पर क्लिक:

ध्यान में रखते हुए दो बटन रहे हैं।

आप जो करना चाहते हैं वह है बटन को क्लिक करने की डिफ़ॉल्ट कार्रवाई को रोकें, जो फ़ॉर्म सबमिट कर रहा है।

function(event) करने के लिए function() पैरामीटर बदलें, इसके बाद एक 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

यह एक रूप के अंदर था और यह पूरी तरह से काम करता था। धन्यवाद! –

+3

आपने अपना जीवन 'डेटा: {" _method ":" delete "}, ... 'भाग से बचाया है। +1 किया! –

+1

@ cassi.lup 'डेटा: {" _method ":" delete "} 'ओपी के प्रश्न में था। आपका +1 @ मक्खन-बियर पर जाना चाहिए था - बस कहना नहीं। – user664833

6

आप उपयोग कर सकते हैं:

type: "DELETE" 
बजाय

:

type: "POST" 

और

०१२३५१६४१०६१ को दूर
data: {"_method":"delete"} 
+0

[अधिकांश ब्राउज़र फ़ॉर्म सबमिट करने के लिए "GET" और "POST" के अलावा अन्य तरीकों का समर्थन नहीं करते हैं] (http://edgeguides.rubyonrails.org/form_helpers.html#how-do-forms-with-patch, रखो, -या हटाना-तरीकों-काम-questionmark); एक अन्य संदर्भ के लिए, https://api.jquery.com/jquery.ajax/ देखें और * अन्य HTTP अनुरोध विधियों जैसे कि PUT और DELETE के लिए खोजें, यहां भी उपयोग किया जा सकता है, लेकिन वे ** ** ** समर्थित नहीं हैं सभी ब्राउज़रों* – user664833

+0

आज के ब्राउज़र 'XMLHTTP' अनुरोध करते समय 'PUT' /' DELETE' का समर्थन करते हैं। हालांकि यह

टैग – illusionist

+1

में समर्थन नहीं कर सकता है मेरे मामले में: डेटा के साथ पोस्ट: {"_method": "delete"} केवल वही है जो मुझे चाहिए। जब मैंने DELETE का उपयोग किया जो हुआ वह चला गया है: "/ नियंत्रक/सदस्य_आईडी" हटाएं और सदस्य_आईडी के साथ ऑब्जेक्ट हटा दिया लेकिन फिर उसने एक और अनुरोध शुरू किया: "नियंत्रक" हटाएं और इससे कोई रूट त्रुटि नहीं हुई है। यह एक लिंक नहीं था, हालांकि यह एक रूप में था। मुझे नहीं पता कि इस विसंगति के कारण क्या हुआ। – KaizenCodes