阅读播放2.2.1文档后,我可以看到没有内置的机制来处理HTTP删除方法? (也不是PUT?)当我说内置时我的意思是,例如,rails有method="delete"
可以与<a></a>
一起用来调用DELETE动词的动作。
所以例如on下面的图片我有一个用户列表(GET /用户......)。
我如何理解我可以通过AJAX调用模拟删除方法,所以我尝试了以下方式:
// index.scala.html
@users.map { user =>
...
<td> <a href="#" class="delete-user" data-id="@user.getId()"> Delete </td>
...
}
// script.js
$(function() {
$('.delete-user').click(function() {
var id = $(this).data('id');
var $that = $(this);
$.ajax({
url: jsRoutes.controllers.Users.delete(id).url,
type: "DELETE"
}).done(function() {
$that.closest('tr').remove();
});
});
});
// Users.java(controller)
@Transactional
public static Result delete(Long id) {
JPA.em().remove(JPA.em().find(User.class, id));
return ok("User with id=" + id + " has been deleted");
}
这样做的正确方法是什么?或者我误解/忽略了文件?
答案 0 :(得分:2)
你正在以正确的方式做到这一点。我可能只提一个小改进,你应该能够做到这一点:
$.ajax(
jsRoutes.controllers.Users.delete(id)
).done(function() {
$that.closest('tr').remove();
});
JavaScript路由器方便地返回一个对象,该对象包含您正在读取的url
属性,但它还包含type
属性,如果您的路由配置为{{1} }} route,其值为DELETE
。在我的应用程序中,我经常编写一个帮助方法,允许我轻松地将其他属性添加到jQuery AJAX请求调用中,例如:
DELETE
然后我可以这样做:
function ajax(route, params) {
return $.ajax($.extend(params, route))
}
答案 1 :(得分:0)
您也可以直接使用路由对象进行呼叫,例如
jsRoutes.controllers.Users.delete(id).ajax( {
done: function ( data ) {
$that.closest('tr').remove();
}
});