Laravel dosent 通过 ajax 删除记录?

Posted

技术标签:

【中文标题】Laravel dosent 通过 ajax 删除记录?【英文标题】:Laravel dosent delete record via 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");
            
        );

    );

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

【问题讨论】:

【参考方案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 是的,我愿意 你仍然得到方法不允许的异常吗?

以上是关于Laravel dosent 通过 ajax 删除记录?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 中的 Ajax 删除

Laravel AJAX 放置和删除

Laravel Ajax 使用按钮删除记录

Laravel 不删除记录

使用 AJAX 在 Laravel 5.3 中删除记录

Laravel通过ajax登录维护会话