使用 ajax 的 Datatable 删除电子邮件操作未捕获数据
Posted
技术标签:
【中文标题】使用 ajax 的 Datatable 删除电子邮件操作未捕获数据【英文标题】:Datatable delete emails action with ajax not catching data 【发布时间】:2021-11-19 04:24:59 【问题描述】:我正在尝试使用 Ajax 从经典加载数据表转移到服务器端。我正在努力用下面的代码“删除”电子邮件。单击后不会删除任何订阅者或电子邮件。如果有人可以帮助我,那就太好了!我正在尝试使用与之前相同的逻辑来通过 Ajax 加载。我在浏览器中没有收到任何错误。
我的应用程序在 Laravel 中,它在控制器中:
public function ajaxDelete(Request $request)
$data = $request->all();
if (isset($data['ids']) && is_array($data['ids']) && count($data['ids']) > 0)
$deleted = null;
$idCnt = 0;
foreach ($data['ids'] as $id)
$subscriber = Subscriber::find($id);
// $subscriber = Subscriber::find($request->input('id'));
if (!empty($subscriber) && $this->user->canDeleteSubscriber($subscriber))
$email = $subscriber->email;
$subscriber->delete();
$deleted = true;
$idCnt++;
echo 'Data Deleted';
这是我加载按钮的方式:
$deleteButton = '<a href="#" class="btn btn-coffee btn-small delete-subscriber" id="'.$subscriber['id'].'"><i class="glyphicon glyphicon-remove"></i> Delete</a>';
$action = $deleteButton;
这是我的 JS 中删除操作的 ajax 调用:
$('#table').on('click', '.delete-subscriber', function()
var sid = $(this).attr('id');
// e.preventDefault();
// var sid = $(this).prop("id").substr(4);
// $(".delete-data").remove();
if(confirm("Are you sure you want to Delete this data?"))
$.ajax(
url:" route('subscribers.ajaxdelete')",
mehtod:"post",
data: id: sid,
success: function(response)
alert("Record deleted.");
// alert(data);
$('#table').DataTable().ajax.reload();
)
else
return false;
);
这是ajaxdelete函数的路径:
Route::get('delete-subscriber', 'SubscriberController@ajaxDelete')->name('subscribers.ajaxdelete');
这是我之前的代码,我尝试从这个逻辑更改为 ajax,也许这会更好地解释。
public function delete(Request $request)
$data = $request->all();
if (isset($data['ids']) && is_array($data['ids']) && count($data['ids']) > 0)
$deleted = null;
$idCnt = 0;
foreach ($data['ids'] as $id)
$subscriber = Subscriber::find($id);
if (!empty($subscriber) && $this->user->canDeleteSubscriber($subscriber))
$email = $subscriber->email;
$subscriber->delete();
$deleted = true;
$idCnt++;
return redirect()->back()->with(['deleted' => $deleted, 'idCnt' => $idCnt, 'ids' => $data['ids']]);
else
return redirect()->back();
JS:
$(".delete-subscriber").on("click", function (e)
e.preventDefault();
var sid = $(this).prop("id").substr(4);
$(".delete-data").remove();
if (confirm('Are you sure?'))
$("#delete-form").append('<input class="delete-data" type="hidden" name="ids[]" value="' + sid + '">');
$("#delete-form").submit();
return false;
);
<form action=" action('SubscriberController@delete') " id="delete-form" method="post">
<input type="hidden" name="_token" value=" csrf_token() ">
</form>
【问题讨论】:
您在控制器方法中期待ids
,但您只发送id
【参考方案1】:
您已在 $data 索引上为控制器中的请求参数写入 id....
if (isset($data['ids']) && is_array($data['ids']) && count($data['ids']) > 0)
但它应该是 $data['id'] 在你的控制器中的任何地方。
如果有任何问题再次存在,请更改此设置,请在评论中提及。
【讨论】:
非常感谢您的帮助。我更改为 id 但再次没有删除任何电子邮件。我发布了我之前尝试更改为 Ajax 加载的代码。也许从有效的代码中我的错误在哪里会更清楚。以上是关于使用 ajax 的 Datatable 删除电子邮件操作未捕获数据的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter + dataTable 自定义删除与引导模型