如何使用Javascript调用路由并从数据库中销毁数据?

时间:2018-04-27 21:30:37

标签: javascript php jquery laravel laravel-5

我正在使用Laravel 5,我需要销毁数据库中的数据,我有以下代码

HTML

<div class="modal fade" id="deletePub" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h6 class="modal-title" id="modalPublicationTitle">Confirm Publication Delete</h6>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">    
                <div class="row align-items-center">
                    <div class="col-lg-12" align="center">Really, do you want to delete this publication?</div>
                    <a href="#" id="btn-confirmDeletePub" class="btn btn-danger btn-sm" role="button">Yes, Delete</a>
                </div>
            </div>
        </div>
    </div>
</div>

JS

$(document).ready(function(){

  $("#btn-confirmDeletePub").click(function(){

    $.ajaxSetup({
        headers: {
          'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });

    var publicationId = window.location.href.split("/")[4]

    console.log(publicationId);

    $.ajax({
        type: "DELETE",
        url: "/publications/" + publicationId,
        data: JSON.stringify(publicationId),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
    });

  });

});

web.php

Route::resource('publications','PublicationController);

PublicationController.php

public function destroy($id)
{
    $publication = Publication::find($id);
    $publication->users()->detach($publication->id);
    $publication->topics()->detach($publication->id);
    $publication->authors()->detach($publication->id);

    $publication->details()->delete();

    //$publication->delete();

    Redirect('/users')->with('success', 'Publication deleted correctly.');

}

单击btn-confirmDeletePub按钮时,以下所有代码都应调用JS文件的Yes, delete函数。 JS按钮捕获要删除的发布的id,并将发送到destroy($id)的{​​{1}}函数,但由于某种原因,此函数未被调用,错误在JS内部,我'当然,但我不知道如何解决。

在Google Chrome控制台中,我收到以下错误:

PublicationController

1 个答案:

答案 0 :(得分:1)

如果要使用delete方法,必须将方法字段添加到ajax调用并将类型设置为post。 正如jQuery文档所说的类型选项:“也可以使用其他HTTP请求方法,如PUT和DELETE,但并非所有浏览器都支持它们。

但是,如果您真的想这样做,Symfony应该针对任何请求处理此问题,将其视为一种形式:

当您从表单发送删除请求时,您应将method属性设置为post并在表单中添加$.ajax({ url: route, type: 'post', data: {_method: 'delete'}, success: function.... 。在ajax中你必须这样做,除非你将方法字段作为数据传递:

<form action="route" method="post">
{{csrf_filed()}}
{{method_filed('DELETE')}}

</form>

详细说明:

当您从表单发送删除请求时,您的表单应如下所示:

{{1}}

当您按下提交按钮时,laravel会查看名称为“_method”的表单输入,并将请求与路由方法和URL匹配。

因此,如果您想通过ajax发送请求,则必须按照现在的方式执行,除非您必须在使用ajax发送的数据中添加方法字段。