Как мне вызвать маршрут с помощью Javascript и уничтожить данные из базы данных? - PullRequest
0 голосов
/ 28 апреля 2018

Я работаю с 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 фиксирует идентификатор публикации, которая будет удалена, и будет отправлена ​​в функцию destroy($id) PublicationController, но по какой-то причине эта функция не вызывается, ошибка находится внутри JS, и я уверен, но Я не знаю, как решить.

В консоли Google Chrome я получаю следующую ошибку:

DELETE http://localhost:8000/publications 500 (Internal Server Error)

1 Ответ

0 голосов
/ 28 апреля 2018

Если вы хотите использовать метод delete, вы должны добавить поле метода к вызову ajax и установить тип post. как сказано в документации jQuery о параметре type: «Другие методы HTTP-запросов, такие как PUT и DELETE, также могут использоваться, но они поддерживаются не всеми браузерами.

Однако, если вы действительно хотите это сделать, Symfony должен обработать это для любого запроса, подумайте об этом как о форме:

когда вы отправляете запрос на удаление из формы, вы должны установить атрибут метода для отправки и добавить {{method_field('DELETE')}} в форму. в ajax вы должны сделать это так, за исключением того, что вы передаете поле метода как данные:

$.ajax({
    url: route,
    type: 'post',
    data: {_method: 'delete'},
    success: function....

Подробно:

при отправке запроса на удаление из формы ваша форма должна выглядеть следующим образом:

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

</form>

при нажатии кнопки отправки laravel просматривает ввод формы с именем «_method» и сопоставляет запрос с методом маршрута и URL.

Поэтому, если вы хотите отправить запрос через ajax, вы должны сделать это так, как вы делаете сейчас, за исключением того, что вы должны добавить поле метода в данные, которые вы отправляете с помощью ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...