我正在尝试使用Node JS(带有Express)和JQuery AJAX从Mongo DB(在本例中为mongoose)中删除数据。
因此,附近有一个数据复选框(接口)。当我检查这些复选框中的一个或多个,然后按下SUBMIT时,我希望它们从数据库(Mongo DB)中删除。
因此,我尝试使用DELETE请求,从AJAX获取数据,然后从DB中删除它(使用Model.remove()),但是只要我想获取req.params(为了从db中删除项目) ),我只得到'未定义'。我认为我的Ajax有问题,但不确定究竟是什么。
app.delete('/index', function(req,res){
console.log("req body: " + req.body); // Undefined?
console.log(req.params.del); // Undefined as well
console.log(req.params.data); // Undefined as well
Blog.remove({item: req.params.del}, function(err, data){
if (err) throw err;
res.json(data);
});
});
$('#deleteAcc').on('click', function(){
//var item = $(this).text().replace(/ /g, "-");
var item = $(".checkbox input:checked").parent();
item.remove();
$.ajax({
type: 'DELETE',
url: '/index',
del: item,
success: function(data){
//do something with the data via front-end framework
location.reload();
}
});
});
<!DOCTYPE html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Simple blogging website</title>
<script
src="https://code.jquery.com/jquery-1.12.4.min.js"
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="
crossorigin="anonymous"></script>
<link href="/assets/styles.css" rel="stylesheet" type="text/css" />
<script src="/assets/appAJAX.js"></script>
</head>
<body>
<h1 align="center" size="40px">Welcome to blog!</h1>
<h2 align="center" size="36px">Best UX/UI Website ever!</h2>
<form style="text-align: center;">
<input style="width: 400px; height: 125px;" type="text" name="inputText" placeholder="Piss someone off..." required/>
<button type="submit">Submit post</button>
</form>
<br>
<div class="control-group">
<% for (var i = 0; i < posts.length; i++) { %>
<label class="checkbox">
<input type="checkbox" /><%= posts[i].item %>
</label>
<% } %>
</div>
<div class="btn">
<button type="button" id="deleteAcc">Delete</button>
</div>
</body>
</html>
答案 0 :(得分:0)
我已经this fiddleJS ...根据需要更改了一些内容...复选框的值将类似posts[i].item._id
,假设{{1} }对象有一个ID(应该有),然后您可能能够在您的服务器中访问item
希望有所帮助
答案 1 :(得分:0)
很抱歉写下我的通知作为答案,我没有足够的积分来撰写评论。但是与@ElmerDantas相关的答案是你将一组id传递给你的后端。因此,您必须使用for循环遍历数组,并在for循环内尝试删除&#34; selected&#34;具有mongoose删除方法的对象:
尝试做这样的事情:
var ids = req.params.deletedItems;
for(var i = 0; i < ids.length; i++){
Blog.remove({item: ids[i]}, function(err, data){ if (err) throw err; res.json(data); })}
答案 2 :(得分:0)
维护每个复选框的ID或值
<input type="checkbox" id="<%= posts[i]._id"/><%= posts[i].item %>
ajax调用中的语法不正确
$(document).ready(function(){
$('#deleteAcc').on('click', function(){
var item = new Array();
if($('input:checkbox:checked').length>0){
$('input:checkbox:checked').each(function(){
item.push($(this).attr('id'));
});
sendResponse(item);
}
});
function sendResponse(item) {
$.ajax({
type:'post',
url:"/index",
data:{item:item},
success:function(data){
location.reload();
}
});
}
});
在控制器中发布帖子请求;
req.body是一个不是数组的对象,所以你只能通过键访问;
使用$ in作为比较查询运算符来删除集合中的文档
app.post('/index', function(req,res){
var items=[];
for(var key in req.body){
items=req.body[key];
}
Blog.remove({_id:{$in:items}},function(err, data){
if (err) throw err;
res.json(data);
});
});
希望这有助于!! :)