在同一事件中逐个调用多个ajax(无jquery)

w6lpcovy  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(183)

当我为某个按钮(在javascript中)注册一个点击事件时,我希望一个接一个地执行三个ajax调用。它们正确地修改了服务器数据库,但页面中没有显示更改。我注意到,如果我尝试在chrome调试中打开inspector时单击按钮,页面将正确显示更改。我认为这可能是ajax调用的回调函数的冲突问题,但我不知道如何处理它。
下面是处理单击事件的代码

document.getElementById("addCategory").addEventListener('click', (e) => {

            tree.autoclick();

            var form = document.getElementById("addcategoryform")
            if (form.checkValidity()) {
                makeCall("POST", 'AddCategory', e.target.closest("form"),
                    function (x) {
                        if (x.readyState == XMLHttpRequest.DONE) {
                            var message = x.responseText;
                            switch (x.status) {
                                case 200:
                                    document.getElementById("erroradd").textContent = message;
                                    document.getElementById("erroradd").style.color = "green";
                                    break;
                                case 400: // bad request
                                    document.getElementById("erroradd").textContent = message;
                                    document.getElementById("erroradd").style.color = "red";
                                    break;
                                case 401: // unauthorized
                                    document.getElementById("erroradd").textContent = message;
                                    document.getElementById("erroradd").style.color = "red";
                                    break;
                                case 500: // server error
                                    document.getElementById("erroradd").textContent = message;
                                    document.getElementById("erroradd").style.color = "red";
                                    break;
                            }
                        }
                    }
                );
            }
            tree.show();
        }

    )

对于第一棵树,autoclick模拟另一个按钮的单击事件:

this.autoclick = function(){
         var e = new Event("click");
         this.saveButton.dispatchEvent(e);

        }

哪种方法执行ajax post调用,用于在服务器上保存修改完成的客户端树:

saveButton.addEventListener('click', (e) => {
                makeCallParam("POST", 'saveModifies', from, to,
                    function (x) {
                        if (x.readyState === XMLHttpRequest.DONE) {
                            let json = x.responseText;

                            switch (x.status) {
                                case 200:
                                    document.getElementById("message").textContent = json;
                                    document.getElementById("message").style.color = "green";
                                    break;
                                case 400: // bad request
                                    document.getElementById("message").textContent = json;
                                    document.getElementById("message").style.color = "red";
                                    break;
                                case 401: // unauthorized
                                    document.getElementById("messaggio").textContent = json;
                                    document.getElementById("messaggio").style.color = "red";
                                    break;
                                case 500: // server error
                                    document.getElementById("messaggio").textContent = json;
                                    document.getElementById("messaggio").style.color = "red";
                                    break;
                            }
                        }
                    }
                );

            })

在autoclick函数之后,我对最初的click事件(addcategory)执行ajax调用,该事件还修改了服务器上的树
最后,我调用树函数show(),该函数通过get ajax调用请求使用新类别修改树,并调用函数update()将它们打印到html上。show()函数不仅在我执行此操作时起作用,在其他情况下,它会正确地显示服务器中的树

show = function() {
            var self = this;
            makeCall("GET", "requestCategories", null,
                function(req) {
                    if (req.readyState == 4) {
                        var message = req.responseText;
                        if (req.status == 200) {
                            categoriesToShow = JSON.parse(req.responseText);
                            if (categoriesToShow.length == 0) {
                                self.alert.textContent = "No categories yet!";
                                return;
                            }
                            self.update(mostraCategorie, document.getElementById("list")); // function that prints list of categories in "list"

                        } else if (req.status == 403) {
                            window.location.href = req.getResponseHeader("Location");
                            window.sessionStorage.removeItem('username');
                        }
                        else {
                            self.alert.textContent = message;
                        }}
                }
            );
        };

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题