【问题标题】:Datatable delete emails action with ajax not catching data使用 ajax 的 Datatable 删除电子邮件操作未捕获数据
【发布时间】: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

标签: javascript php jquery ajax laravel


【解决方案1】:

您已在 $data 索引上为控制器中的请求参数写入 id....

 if (isset($data['ids']) && is_array($data['ids']) && count($data['ids']) > 0) 

但它应该是 $data['id'] 在你的控制器中的任何地方。

如果有任何问题再次存在,请更改此设置,请在评论中提及。

【讨论】:

  • 非常感谢您的帮助。我更改为 id 但再次没有删除任何电子邮件。我发布了我之前尝试更改为 Ajax 加载的代码。也许从有效的代码中我的错误在哪里会更清楚。
猜你喜欢
  • 1970-01-01
  • 2014-05-15
  • 2019-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 2017-05-14
相关资源
最近更新 更多