Playframework Play framework 2.2.1通过ajax删除记录,方法:删除

Playframework Play framework 2.2.1通过ajax删除记录,方法:删除,playframework,playframework-2.0,Playframework,Playframework 2.0,在阅读Play2.2.1文档之后,我可以看到,没有处理HTTP delete方法的内置机制吗?(nor PUT?)。 我如何理解我可以通过AJAX调用模拟delete方法,所以我尝试了以下方法: //index.scala.html @users.map { user => ... <td> <a href="#" class="delete-user" data-id="@user.getId()"> Delete </td> ... } //ja

在阅读Play2.2.1文档之后,我可以看到,没有处理HTTP delete方法的内置机制吗?(nor PUT?)。

我如何理解我可以通过AJAX调用模拟delete方法,所以我尝试了以下方法:

//index.scala.html

@users.map { user =>
...
<td> <a href="#" class="delete-user" data-id="@user.getId()"> Delete </td>
...
}
//java(控制器)


那么这是正确的方法吗?或者我误解了/忽略了文档?

您的做法完全正确。我可能只提到一个小的改进,您应该能够做到这一点:

$.ajax(
  jsRoutes.controllers.Users.delete(id)
).done(function() {
  $that.closest('tr').remove();
});
JavaScript路由器方便地返回一个对象,该对象包含您正在读取的
url
属性,但它还包含一个
type
属性,如果您的路由配置为
DELETE
路由,则该属性的值为
DELETE
。在我的应用程序中,我通常会编写一个帮助器方法,允许我轻松地将其他属性添加到jQuery AJAX请求调用中,例如:

function ajax(route, params) {
  return $.ajax($.extend(params, route))
}
然后我可以做这样的事情:

ajax(jsRoutes.controllers.Users.delete(id), {
  headers: { "Auth-Token": "foobar" }
}).done( ... )

您也可以直接使用路由对象进行呼叫,例如

jsRoutes.controllers.Users.delete(id).ajax( {
  done: function ( data ) {
    $that.closest('tr').remove();
  }
});

Rails并不以您理解的方式真正支持
PUT
DELETE
。相反,它使用
POST
并使用隐藏字段模拟其他方法。所以,是的,你走在正确的轨道上。我是在框架支持的背景下说的。
ajax(jsRoutes.controllers.Users.delete(id), {
  headers: { "Auth-Token": "foobar" }
}).done( ... )
jsRoutes.controllers.Users.delete(id).ajax( {
  done: function ( data ) {
    $that.closest('tr').remove();
  }
});