JavaScript & Ajax 不刷新 CRUD

JavaScript & Ajax without refreshing CRUD

我有一个关于 JavaScript 的问题。我想在不刷新页面的情况下创建 CRUD。我可以创建、读取和删除项目。但是当我更新项目时它会出现问题。 当 table tr 双击被点击或编辑图标被创建时,我想要一个函数工作(我将一个 id 作为数据发送给函数), 函数通过ID从api获取数据并填写表格 第一次提交表单时,它会正确更新表单。但是第二次我更新了另一个项目并提交了。系统更新此项和上一项 第三次重复此过程。此时每3行的数据根据​​上次的数据变化 这散文一次又一次地重复 我用警报记录了 ID。我在下面发送我的 kod。有人可以帮我吗?

            const options = {
                headers: {'Authorization': "Bearer " + readCookie('AuthToken')}
            };

            let UrlArgs = {
                'action': "read",
                'module': "positions",
                'sector': "hrm"
           };
            alert(ids); //**one ID**
            urlgen(UrlArgs).then(url => { 
                axios.get(url + "/" + ids, options)
                    .then(function (response) {
                        alert(ids); //**one ID**
                        let data = response['data'];
                        $('#PositionEditModal').text("Pozisiya redaktə edilir: " + data['name']);
                          $("#PositionEditForm input[name=name]").val(data['name']);
                        $('#PositionEditForm select[name="permission_level"] option').each(function () {
                            if ($(this).val() == data['permission_level']) {
                                $(this).attr("selected", "selected");
                            }
                        });
                        alert(ids); **//one ID**

                        $('.PositionEditModal').modal('show');
                        $(document).on('click', '#submitUpdate', function () {
                           
                            let id = data['id'];
                            alert(id); //**two ID**
                            // $('#PositionEditForm input, #PositionEditForm select').jqBootstrapValidation({
                            // preventSubmit: true,
                            // submitSuccess: function ($form, event) {
                            //     event.preventDefault();
                            //     $this = $('#submitUpdate');
                            $('#submitUpdate').prop('disabled', true);
                            let form_data = $("#PositionEditForm").serialize();

                            $.ajaxSetup({
                                headers: {
                                    'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
                                }
                            });
                            alert(id);
                            let editUrl = "";

                            editUrl = '{{route("erp.panel.hrm.positions.update", ":id")}}';
                            editUrl = editUrl.replace(':id', id);
                            $.ajax({
                                url: editUrl,
                                method: "POST",
                                data: form_data,
                                cache: false,
                                beforeSend: function () {
                                    $(".beforeSend").hide();
                                    $(".loadingSend").show();
                                },
                                success: function () {
                                    setTimeout(function () {
                                        $('#PositionEditForm').trigger('reset');
                                        $('.PositionEditModal').modal('hide')
                                        errorManagment(null, "Vəzifə uğurla redaktə edildi");
                                    }, 1000);
                                    setTimeout(function () {
                                        datafetch();
                                    }, 1000);
                                },
                                error: function (request) {
                                    $.each(request.responseJSON.errors, function (key, item) {
                                        errorManagment(item)
                                    });
                                },
                                complete: function () {
                                    setTimeout(function () {
                                        $('#submitUpdate').prop("disabled", false);
                                        $(".loadingSend").hide();
                                        $(".beforeSend").show();
                                    }, 800);
                                }
                            });
                            data = "";
                            // },
                        })

                    }).catch(function (error) {

                    httpMessage(error.response.status).then(message => {
                        errorManagment(message);
                    });
                });
            })

        }```

创建 API.

最简单的方法是创建一个 api。然后,您可以动态更新 API 并发送 HTTP Get(或 POST)请求以读取 api 并基于此更新页面。

您可以在使用任何服务器端语言时执行此操作。您可以创建一个路径(如 /api/detail/get_crud)并在服务器上发送存储在那里的数据。这是最简单的方法,也是最好的方法。

这还可以轻松地重新创建您的网站,它有很多好处。我将在这里列出一些:

  1. 轻松改造整个网站
  2. 易于使用
  3. 你可以发送JSON数据到API(JSON很好用)
  4. 你掌控一切

以下是缺点列表:

  1. 您必须不断发出 HTTP 请求才能更新网站上的数据

很多网站都这样使用 API。以 https://repl.it 为例。他们有一个api。喜欢这些:

  1. https://replit.com/data/profiles/(username) = 显示(username)public数据
  2. https://replit.com/data/repls/@(ownerofrepl)/(replname) = 显示 (replname)public 数据。
  3. https://replit.com/graphql

此外,如果我是你,我会使用 fetch。使用起来简单多了。

希望对您有所帮助! (抱歉,如果这不能回答您的问题,我无法完全理解)

每次从 Axios 收到响应时,您都在分配点击事件。在本例中,这些事件附加到 ID 为 submitUpdate 的元素。在将新的点击事件分配给同一元素之前,您可能需要使用 jquery 中的“解除绑定”或“关闭”功能删除该元素的所有现有点击事件。

  • unbind 在 jquery 的当前版本中已弃用,请改用 off