【问题标题】:Laravel dosent delete record via ajax?Laravel dosent 通过 ajax 删除记录?
【发布时间】:2019-12-11 15:21:37
【问题描述】:

我正在尝试使用 ajax 删除记录,在 laravel 5.4 中,我知道这是常见问题之一,并且已经有很多关于此主题的在线解决方案和教程。我尝试了其中一些,但大多数都给了我同样的错误 NetworkError: 405 Method Not Allowed。我试图从不同的角度完成这项任务,但我被卡住了,找不到我错的地方,这就是为什么我添加了这个问题作为指导。

我正在尝试使用以下脚本来删除记录。

输入路线:

    Route::delete('article/delete/{article}', 'ArticleController@delete_article')->name("delete_article");

在控制器中:

    public function delete_article($id)
    {
        article::where('id', $id)->delete($id);

        return response()->json([
            'success' => 'Record deleted successfully!'
       ]);
    }

在视图中:

    <li name="csrf-token" content="{{ csrf_token() }}">
        <a class="deleteRecord" href="/admin/article/delete/{{$article->id}}">
            <i class="icon-bin"></i>delete
        </a>
    </li>

Ajax 代码是:

    $(".deleteRecord").click(function(){
        var id = $(this).data("id");
        var token = $("meta[name='csrf-token']").attr("content");

        $.ajax({
            url: /admin/article/delete/{{article}},
            type: 'DELETE',
            data: {
                "id": id,
                "_token": token,
            },
            success: function (){
                console.log("it Works");
            }
        });

    });

如您所见,似乎一切正常,但我不知道为什么它不能正常工作? 请帮帮我,伙计们。

【问题讨论】:

    标签: php ajax laravel crud


    【解决方案1】:

    这对我有用: 在路线中

    Route::post('/article/delete', 'ArticleController@delete_article');//Ajax Routes
    

    IN 控制器

    public function delete_article(Request $request)
        {
            $id=$request['id'];
            article::where('id', $id)->delete();
            return response()->json(['articleDelete' => 'success']);
        }
    

    在视图中:

    <td>
    <a class="deleteRecord" data_id="{{$article->id}}">
    <i class="icon-bin" style="color: black"></i></a>
    </td>
    

    在 AJAX 中:

    $(".deleteRecord").each(function () {
                $(this).on("click", function () {
                    var $tr = $(this).closest('tr');
                    var id = $(this).attr("data_id");
                    swal({
                        title: "Are you sure to Delete!",
                        text: "***",
                        icon: "warning",
                        buttons: [
                            'cansle!',
                            'yes'
                        ],
                        dangerMode: true,
                    }).then(function(isConfirm) {
                        if (isConfirm) {
                            $.ajax({
                                url: '/admin/article/delete',
                                type: 'post',
                                dataType: 'json',
                                data: {_token: "{{csrf_token()}}" , id:id},
                                success: function () {
                                    swal({
                                        title: "article deleted succesfuly",
                                        icon: "success",
                                        type: 'success',
                                    })
                                    $tr.find('td').fadeOut(1000,function(){
                                        $tr.remove();
                                    });
                                }
                            })
                        }
                    })
                });
            });
    

    【讨论】:

      【解决方案2】:

      问题(据我所知)出在此处:

      <a class="deleteRecord" href="/admin/article/delete/{{$article->id}}">
      

      在您看来,您创建了一个名为id 的变量,其值基于data-id 属性。

      var id = $(this).data("id");
      

      但在您的 a 标签中,您没有 data-id 属性。所以你必须添加它(像这样):

      <a class="deleteRecord" href="/admin/article/delete/{{$article->id}}" data-id="{{$article->id}}">
      

      同样在您的ajax 通话中,url 不正确(基于您在路由中定义的内容:

      Ajax 调用:

      url: "article/"+id
      

      路线:

      article/delete/{article}
      

      所以要么改变路线:

      article/{article}
      

      或更改ajax 调用:

      url: "article/delete/"+id
      

      还有一件事。您必须阻止默认的 a 标签操作。像这样更改事件:

      $(".deleteRecord").click(function(event){
          event.preventDeault();
      

      【讨论】:

      • 哈哈。嗨朋友。你有没有试过最后一部分:routeajax
      • MethodNotAllowedHttpException
      • 你的 ajax 工作吗?我的意思是网址不应该改变。如果 url 发生变化,则 click 事件不起作用。
      • @ Rouhollah Mazarei 是的,一切都是正确的,但显示 http 异常。
      • 您是在浏览器内部还是在开发者工具的network 选项卡中收到错误消息?
      【解决方案3】:

      你在很多地方都做错了。试试这个

      路线

      Route::delete('article/delete/{article}', 'ArticleController@delete_article')->name("delete_article");
      

      控制器

      public function delete_article($article)
          {
              article::where('id', $article)->delete();
              return response()->json([
                  'success' => 'Record deleted successfully!'
              ]);
          }
      

      查看

      <button class="deleteRecord" data-id="{{$article->id}}"><i class="icon-bin"></i>delete</button>
      

      AJAX

      $(".deleteRecord").click(function(){
          var id = $(this).data("id");
          var token = $("meta[name='csrf-token']").attr("content");
      
          $.ajax({
              url: "article/delete/"+id,
              type: 'POST',
              dataType: 'json',
              data: {
                  _method: 'DELETE',
                  submit: true,
                  _token: token,
              },
              success: function (){
                  console.log("it Works");
              }
          });   
      });
      

      【讨论】:

      • 你会根据我的回答改变一切吗?
      • @zahid hasan emon 是的,我愿意
      • 你仍然得到方法不允许的异常吗?
      猜你喜欢
      • 2019-04-12
      • 2017-02-19
      • 2018-11-08
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 2018-06-11
      相关资源
      最近更新 更多