这段时间在写公司的应用,遇到这个问题,特此记录保留。
应用功能:批量删除数据
ajax像后台传输数组
html结构
<a href="#" onclick="delete_this('',true)" data-action="trash">
批量删除
</a>
@if($data != null)
@foreach($data as $item)
<div class="image-checkbox">
//选择框,并给value对应该数据的id,用于批量选择的
<input type="checkbox" class="cbr" value="{{$item->id}}" />
//数据名称
<div class="image-checkbox">
{{$item->name}}
</div>
</div>
@endforeach
@endif
javascript
//获取页面中的选择框
var box = $('.cbr');
//创建一个空的数组
var arr = new Array();
for(var i=0; i < box.length; i++){
//for循环出选择框对应的id数组
if(box[i].checked)
{
arr.push(box[i].value);
}
}
$.ajax({
type : 'POST',
url : '/delete',
data : {
//将数组命名id,方便后台读取
id : arr
},
success : function(data){
console.log(data.msg);
}
});
后台
public function delete_list_many()
{
//$_POST方法是php原生方法,用户获取传入的post值,我们前台用的是ajax post的方法传入的,如果是表单,可直接用laravel的Input::all()接收post和get的数据,这里的'id'就是ajax里data的id。
$data = $_POST['id'];
foreach ($data as $item)
{
//foreach执行即可
$id = $item;
Live::where('id',$id)->delete();
}
return ['msg'=>'删除成功'];
}
对我自己来说的难点:
- jq如何将选项框的id值存到一个数组里
- 后台如果读取ajax传入的数组,并执行
由于自己基础不牢固,对于以上两点百度了很久才弄明白。
反思
后台删除数据是使用foreach执行的,所有每个id的数据都会执行一边delete,数据很多的话,效率很一般。
所以我觉得是有更有效率的方法解决这个问题的,例如直接执行sql语句,把要删除的id卸载语句里什么的,由于这个应用基本批量删除的功能不常用,所以以后遇到了再去深究吧。