2013-02-17 3 views
10

Я пытаюсь удалить экземпляр модели Rails с помощью Ajax.Rails Ajax 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

Если предположить, что кнопка находится внутри формы, щелкнув по нему, вероятно, представляя эту форму в дополнении к стрельбе Аякса запроса.

Что вы хотите сделать, это предотвратить действие по умолчанию нажатия кнопки, которая отправляет форму.

Изменение параметра 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

Он был внутри формы, и это сработало отлично. Благодаря! –

+3

Вы сохранили мою жизнь с помощью 'data: {" _method ":" delete "}, ...' part. Добавила +1! –

+1

@ cassi.lup 'data: {" _method ":" delete "}' был в вопросе OP. Ваш +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, -Положите, -или-удалить-методу-работу-вопросительный); для другой ссылки см. https://api.jquery.com/jquery.ajax/ и поиск * Другие методы запроса HTTP, такие как PUT и DELETE, также могут использоваться здесь, но они ** не поддерживаются ** все браузеры.* – user664833

+0

Сегодняшние браузеры поддерживают 'PUT' /' DELETE' при выполнении 'XMLHTTP' запросов. Однако он может не поддерживать в

тег – illusionist

+1

В моем случае типа: POST с данными: {"_method": "delete"} именно то, что мне нужно. Когда я использовал DELETE, это произошло: DELETE «/ controller/member_id» и удалил объект с помощью member_id, но затем он запустил другой запрос: DELETE «/ controller» и который поднял ошибку «Нет маршрута». Это была ссылка не кнопка, но она была в форме. Я не знаю, что вызвало эту аномалию. – KaizenCodes