今天在看一个node的视频课程,其中有一个浏览器发送了ajax type为‘delete’的请求,看到视频教程的源码,很震惊。 直接贴代码:
jquery处理ajax请求代码如下:
$(function () {
$('.del').click(function (e) {
var target = $(e.target);
var id = target.data('id');
var tr = $('.item-id-'+id);
$.ajax({
type: 'DELETE',
url: "/admin/list?id=" +id
})
.done(function (results) {
if (results.success === 1) {
if (tr.length > 0) {
tr.remove()
}
}
})
})
})
node处理这个delete请求代码如下
app.delete('/admin/list',function(req,res){
var id = req.query.id;
if(id){
Movie.remove({_id: id},function(err,movie){
if(err){
console.log(err)
}
else{
res.json({success:1})
}
})
}
});
上面的代码我测试运行是没有问题的。 问题来了,express API里面我没有找到app.delete()方法,对于ajax的get/post/put/delete请求,node代码是这么写的吗?app.get() app.post(),app.put(),app.delete()这么处理的吗?通常大神们的做法是怎样的?
后来搜索看到这么一篇文章,Develop a RESTful API Using Node.js With Express and Mongoose 。贴出来看看,这篇文章这么写是不是过时了? 现在处理ajax的4种请求get/post/put/delete该用什么方法呢?
jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ? // Support: IE6+ function() {
return !this.isLocal && /^(get|post|head|put|delete|options)$/i.test( this.type ) && createStandardXHR() || createActiveXHR();
} : // For all other browsers, use the standard XMLHttpRequest object createStandardXHR; head|put|delete 都是post的马甲,这些方法要浏览器支持吧
@alsotang 把put/delete类型改成post是可以用的,看来put/delete都是post的马甲没错。例如上面的代码改成:
$(function () {
$('.del').click(function (e) {
var target = $(e.target);
var id = target.data('id');
var tr = $('.item-id-'+id);
$.ajax({
type: 'POST',
url: "/admin/list?id=" +id
})
.done(function (results) {
if (results.success === 1) {
if (tr.length > 0) {
tr.remove()
}
}
})
})
})
var id = req.query.id;
if(id){
Movie.remove({_id: id},function(err,movie){
if(err){
console.log(err)
}
else{
res.json({success:1})
}
})
}
});
测试也是没有问题的。你说的method-override可以解决delete/put方法的兼容性问题,还没测试,应该可用。