@OlegGazmanov

Как правильно написать скрипт удаления записи Ajax?

Привет.
Написал небольшой скрипт, который удаляет записи из базы. Проблема в том, что при нажатии кнопки удалить, удаляется всегда первая запись, которая есть в базе, а не та которая нужна. В url вроде как передаю ссылку на роут удаления и id
<script type="text/javascript">
        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });

        $(document).ready(function () {
            $("body").on("click","#delete",function(e){
                e.preventDefault();

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

                $.ajax({
                    url: "{{route('deletePost',['id' => $post->id])}}",
                    type: 'DELETE',
                    data: {_token: token, id: id},
                    success: function (response){
                        $("#deletePost").html(response.message);
                    }
                });
                return false;
            });
        });
    </script>

Роут
Route::delete('/id{id}/delete', 'ProfileController@delete')->name('deletePost'); //Удал

Метод
public function delete($id) {
        $post = Profile::find($id);
        $post->delete();
        return response()->json([
            'message' => 'deleted...'
        ]);
    }
  • Вопрос задан
  • 53 просмотра
Решения вопроса 1
OlegGazmanov, Первое что приходит в голову, так это что у тебя не правильно написан JS код.

$("body").on("click","#delete",function(e){

Здесь ты кликаешь по записи, если записей на странице много, то ID на странице одинаковых не может быть много, соответственно у всех записей должен быть класс .delete

Второй момент

var id = $(this).attr('data-id');

Скорее всего у каждой записи в цикле в атрибуте data-id ты присваиваешь реальный ID записи, например:

$post->id

Затем в переменную JS var id сохраняешь ID записи по которому кликнули, но потом:

url: "{{route('deletePost',['id' => $post->id])}}",


Передаешь не ID JS, который получил, а php $post->id, соответственно вопрос, у тебя на странице скрипт выводится и плодится тоже в цикле? тогда это не правильно, сюда нужно передавать ID элемента по которому кликнули, соответственно на JS (var id )

Ну и здесь:

success: function (response){
                        $("#deletePost").html(response.message);
                    }


Здесь у тебя выведется инфа о том, что пост удален, а запись на странице останется, соответственно ее так-же нужно удалять на странице remove() через JS, это первое, что пришло в голову пересмотри сам скрипт

в url лучше формируй прямую ссылку на удаление записи(строкой).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы