【问题标题】:How to call DELETE request method in Yesod?如何在 Yesod 中调用 DELETE 请求方法?
【发布时间】:2011-12-23 23:14:15
【问题描述】:

在关于路由的书中(http://www.yesodweb.com/book/routing-and-handlers)有一段话:

每个请求方法的单独处理程序将是相同的,加上一个 请求方法列表。请求方法必须全部大写 信件。例如,/person/#String PersonR GET POST DELETE。在这个 在这种情况下,您需要定义三个处理函数 getPersonR, postPersonR 和 deletePersonR。

执行类似的操作

curl -X DELETE localhost:3000/person/1

有效,因此服务器能够处理这些请求。

几个示例(例如 https://github.com/snoyberg/haskellers/blob/master/routeshttp://pbrisbin.com/posts/posts_database )使用 GET 或 POST 请求(而不是 DELETE)来处理此问题。

有没有一种直接的方法可以从 Yesod-code 调用 DELETE 请求?这样路由处理程序deletePersonR 就会被调用?

【问题讨论】:

  • 不能直接拨打deletePersonR吗?

标签: rest haskell yesod


【解决方案1】:

GETPOST 方法可以使用页面上的纯链接或表单访问不同,DELETE 方法需要使用 JavaScript,并且并非所有浏览器都支持。这就是为什么经常使用POST 的原因。要从 JavaScript 调用 DELETE 方法,最简单的方法是使用 JavaScript 框架,例如 jQuery

$.ajax({
  url: "/person/1",
  type: "DELETE",
  success: function(html){
    alert("Ok, deleted");
  }
});

【讨论】:

  • 另外,如果您使用 Julius 生成此 Javascript,您可以使用类型安全的 URL 而不是“/person/1”。
  • PSA:如果您使用具有 POST 方法的表单、样式看起来像链接的按钮以及来自 wai-extra 包的 a method override,则无需 JavaScript 即可完成此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 2013-12-09
  • 2015-05-17
  • 2013-06-09
相关资源
最近更新 更多