這段時間在寫公司的應用,遇到這個問題,特此記錄保留。
應用功能:批量刪除數據
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卸載語句里什么的,由于這個應用基本批量刪除的功能不常用,所以以后遇到了再去深究吧。