【问题标题】:Delete method with Sweet Alert in LaravelLaravel 中带有 Sweet Alert 的删除方法
【发布时间】:2017-03-27 13:06:00
【问题描述】:

我正在测试一种使用 Sweet Alert 的方法,以改进使用 laravel 框架的 Javascript 警报方法发出的消息。

1 - 我下载了文件 sweetalert.css 和 sweetalert.min.js。

2 - 所以我从 app.blade.php 连接文件

<!-- Sweet Alert -->
<link href="{{ asset('/dist/css/sweetalert.css') }}" rel="stylesheet">
<!-- Sweet Alert -->
<script src="{{ asset('/dist/js/sweetalert.min.js') }}"></script>

3 - 我使用 Javascript 的 onclick 事件和以下 Sweet Alert 函数创建了删除按钮:

{!! Form::open(['method' => 'DELETE','route' => ['users.destroy', $user->id],'style'=>'display:inline']) !!}
<button onclick="
 swal({
  title: 'Esta seguro de realizar esta Acción?',
  text: 'Si procede este usuario será eliminado!',
  type: 'warning',
  showCancelButton: true,
  confirmButtonColor: '#DD6B55',
  confirmButtonText: 'Eliminar!',
  cancelButtonText: 'Cancelar',
  closeOnConfirm: false,
  closeOnCancel: false
},
function(){
  swal('Usuario eliminado!', 'Este usuario fue eliminado de nuestros registros.', 'success');
});"
  class="btn btn-danger" data-toggle="tooltip" data-placement="top" title="Eliminar usuario"> <i class="material-icons">delete</i> 
</button>
{!! Form::close() !!}

4 - 这是我从 UserController 中删除用户的方法:

public function destroy($id)
{
    User::find($id)->delete();
    return redirect()->route('users.index')
                    ->with('success','User deleted successfully');
}

5 - 删除用户时出现问题,显示警告消息。

但是自动关闭和删除用户,不允许采取确认动作,是否删除用户,方法在 Sweet Alert 中定义。

由于我使用 Laravel 作为框架,因此可以提供帮助以解决此问题或推荐更好的方法。

【问题讨论】:

标签: javascript php laravel laravel-5.2 sweetalert


【解决方案1】:

无论您是确认还是取消删除,您都在对按钮单击执行操作。

<a href="" class="button" data-id="{{$user->id}}">Delete</a>

Jquery 和 Ajax:

$(document).on('click', '.button', function (e) {
    e.preventDefault();
    var id = $(this).data('id');
    swal({
            title: "Are you sure!",
            type: "error",
            confirmButtonClass: "btn-danger",
            confirmButtonText: "Yes!",
            showCancelButton: true,
        },
        function() {
            $.ajax({
                type: "POST",
                url: "{{url('/destroy')}}",
                data: {id:id},
                success: function (data) {
                              //
                    }         
            });
    });
});

还有:

public function destroy(Request $request)
{
    User::find($request->id)->delete();
    return redirect()->route('users.index')
                    ->with('success','User deleted successfully');
}

【讨论】:

  • 非常感谢您的回答,我正在尝试应用您的方法,但无法正常工作。它只生成确认是否继续操作的窗口,但不会删除记录。错误如下:
  • POST localhost/zizaco_entrust/public/destroy 500(内部服务器错误)发送@jquery.min.js:4ajax @jquery.min.js:4(匿名函数)@users?page=3:429l @sweetalert。 min.js:1s @sweetalert.min.js:1g @sweetalert.min.js:1
  • 服务器出错。确保你有路线:Route::post('/destroy','UserController@destroy');
  • 非常感谢。最后我不得不添加一个 location.reload();事件后刷新页面。非常感谢。
  • 为什么我不能通过使用 var id = $(this).data('id'); 得到值 data-id="{{$user->id}}" 跨度>
【解决方案2】:

在视图中:

<button onclick="deleteItem(this)" data-id="{{ $user->id }}">Delete</button>

在 Jquery 和 Ajax 中:

<script type="application/javascript">

        function deleteItem(e){

            let id = e.getAttribute('data-id');

            const swalWithBootstrapButtons = Swal.mixin({
                customClass: {
                    confirmButton: 'btn btn-success',
                    cancelButton: 'btn btn-danger'
                },
                buttonsStyling: false
            });

            swalWithBootstrapButtons.fire({
                title: 'Are you sure?',
                text: "You won't be able to revert this!",
                icon: 'warning',
                showCancelButton: true,
                confirmButtonText: 'Yes, delete it!',
                cancelButtonText: 'No, cancel!',
                reverseButtons: true
            }).then((result) => {
                if (result.value) {
                    if (result.isConfirmed){

                        $.ajax({
                            type:'DELETE',
                            url:'{{url("/user/delete")}}/' +id,
                            data:{
                                "_token": "{{ csrf_token() }}",
                            },
                            success:function(data) {
                                if (data.success){
                                    swalWithBootstrapButtons.fire(
                                        'Deleted!',
                                        'Your file has been deleted.',
                                        "success"
                                    );
                                    $("#"+id+"").remove(); // you can add name div to remove
                                }

                            }
                        });

                    }

                } else if (
                    result.dismiss === Swal.DismissReason.cancel
                ) {
                    swalWithBootstrapButtons.fire(
                        'Cancelled',
                        'Your imaginary file is safe :)',
                        'error'
                    );
                }
            });

        }

    </script>

在控制器中:

public function destroy(User $user, Request $request, $id)
    {
        if ($request->ajax()){

            $user = User::findOrFail($id);

            if ($user){

                $user->delete();

                return response()->json(array('success' => true));
            }

        }
    }

在路线中

Route::delete('/user/delete/{id}','UserController@destroy');

【讨论】:

    【解决方案3】:

    我认为我的代码更接近 Laravel 框架,它有 CSRF 并且使用了 Delete 方法;也更容易集成。

    Laravel 8 和 SweetAlert 2

    用户控制器:

    public function destroy(User $user)
    {
        $user->delete();
        toast('Your file has been deleted !', 'success');
        return redirect(route('user.index'));
    }
    

    删除 html 表单: 用于 css 类的引导程序

    <form id="delete-user-form" action="{{route('user.destroy',$user)}}" method="POST">
        @csrf
        @method('DELETE')
        <button onclick="return false" id="delete-user" class="btn btn-danger">Delete</button>
    </form>
    

    jQuery

     $('#delete-user').on('click', function (e) {
                e.preventDefault();
                let id = $(this).data('id');
                Swal.fire({
                    title: 'Are you sure ?',
                    text: "You won't be able to revert this !",
                    icon: 'warning',
                    showCancelButton: true,
                    confirmButtonColor: '#3085d6',
                    cancelButtonColor: '#d33',
                    confirmButtonText: 'Yes, delete it!'
                }).then((result) => {
                    if (result.isConfirmed) {
                        $('#delete-post-form').submit();
                    }
                })
            });
    

    【讨论】:

      【解决方案4】:

      我已将此代码实现到我的 laravel 项目中,我的路线是销毁的资源路线。 这段代码对我有用。如上面的评论 location.reload() 帮助我,我将它放入代码中...请尝试让我知道...它是否适合您...

      <script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
      //.deletebutton is the class name in button
      <script>
          $('.deletebutton').on('click', function () {
              // return confirm('Are you sure want to delete?');
              event.preventDefault();//this will hold the url
              swal({
                  title: "Are you sure?",
                  text: "Once clicked, this will be softdeleted!",
                  icon: "warning",
                  buttons: true,
                  dangerMode: true,
              })
              .then((willDelete) => {
                  if (willDelete) {
                      swal("Done! category has been softdeleted!", {
                          icon: "success",
                          button: false,
                      });
                  location.reload(true);//this will release the event
                  } else {
                      swal("Your imaginary file is safe!");
                  }
              });
          });
      </script>
      

      【讨论】:

        【解决方案5】:

        我已经在我的 laravel 项目中实现了这段代码,并通过使用带有 slug 的路由名称来删除数据。这段代码对我有用。而且我还通过使用 id 从表中删除行而不使用 reload()。所以试试这个代码,让我知道它是否适合你。

         $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });
        
        function confirmDelete(slug) {
            swal({
                    title: "Are you sure!",
                    type: "error",
                    confirmButtonClass: "btn-danger",
                    confirmButtonText: "Yes!",
                    showCancelButton: true,
                })
                .then((willDelete) => {
                    if (willDelete.value == true) {
                        var url = '{{ route("instrument.delete", ":slug") }}';
                        url = url.replace(':slug', slug);
                        $.ajax({
                            url: url,
                            type: "POST",
                            data: {
                                '_method': 'DELETE'
                            },
                            success: function (data) {
                                if (data.status == 1) {
                                    swal({
                                        title: "Success!",
                                        type: "success",
                                        text: "Instrument has been deleted \n Click OK",
                                        icon: "success",
                                        confirmButtonClass: "btn btn-outline-info",
                                    });
                                    $('#tr' + data.slug).remove();
                                }
        
                            },
                            error: function (data) {
                                swal({
                                    title: 'Opps...',
                                    text: data.message,
                                    type: 'error',
                                    timer: '1500'
                                })
                            }
                        })
                    }
                });
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-10
          • 1970-01-01
          • 2016-07-23
          • 2021-10-07
          • 2018-12-04
          相关资源
          最近更新 更多