Как вызвать метод запроса DELETE в Yesod?

В книге по маршрутизации (http://www.yesodweb.com/book/routing-and-handlers ) есть абзац:

Отдельный обработчик для каждого метода запроса будет таким же, плюс список методов запроса. Методы запроса должны быть ВСЕ ЗАГЛАВНЫМИ БУКВАМИ. Например, /person/#String PersonR ПОЛУЧИТЬ ПОСЛЕ УДАЛЕНИЯ. В этом случае вам нужно будет определить три функции-обработчика: getPersonR, postPersonR и deletePersonR.

Выполнение чего-то вроде

curl -X УДАЛИТЬ localhost:3000/человек/1

работает, поэтому сервер способен обрабатывать эти запросы.

Несколько примеров (например, https://github.com/snoyberg/haskellers/blob/master/routes и http://pbrisbin.com/posts/posts_database ) используют запросы GET или POST ( вместо DELETE), чтобы справиться с этим.

Есть ли прямой способ вызвать запрос DELETE из кода Yesod? Чтобы вызывался обработчик маршрута deletePersonR?


person davidbe    schedule 07.11.2011    source источник
comment
Вы не можете напрямую позвонить deletePersonR?   -  person 9000    schedule 08.11.2011


Ответы (1)


В отличие от методов GET и POST, доступ к которым можно получить с помощью простых ссылок или форм на странице, методы DELETE требуют использования JavaScript и поддерживаются не всеми браузерами. Вот почему вместо него часто используется POST. Чтобы вызвать метод DELETE из JavaScript, проще всего использовать структуру JavaScript, например jQuery. :

$.ajax({
  url: "/person/1",
  type: "DELETE",
  success: function(html){
    alert("Ok, deleted");
  }
});
person hammar    schedule 07.11.2011
comment
Кроме того, если вы сгенерируете этот Javascript с помощью Julius, вы можете использовать типобезопасный URL-адрес вместо /person/1. - person Michael Snoyman; 08.11.2011
comment
PSA: это можно сделать без JavaScript, если вы используете форму с методом POST, кнопку, оформленную в виде ссылки, и переопределение метода из пакета wai-extra. - person Jezen Thomas; 10.07.2019