使用 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 删除电子邮件操作未捕获数据的主要内容,如果未能解决你的问题,请参考以下文章

DataTable ajax分页+删除

DataTable 子行未显示

Codeigniter + dataTable 自定义删除与引导模型

表达式引擎:从邮件列表中删除成员

jquery的dataTable怎么使用 , 需要引入啥js文件,怎么创建表和怎么添加删除数据?

从按钮引导程序 4 中删除禁用属性