jquery JavaScript函数在 AJAX 调用的php脚本完成之前运行

ycggw6v2  于 2023-08-04  发布在  jQuery
关注(0)|答案(1)|浏览(125)

所以我有一个用来提交给 AJAX 函数,我称之为submitAjax:

function submitAjax(Data){
    $.ajax({
        type: "POST",
        url: window.location,
        data: Data,
        datatype: 'json',
        success: function(response){
            var res = response;
        } 
    });
}

字符串
然后我有函数调用刷新div,其中一个是refreshPostResults:

function refreshPostResults(){
   var xhttp = new XMLHttpRequest();
   xhttp.open("GET", "post.php", false);
   xhttp.send(null);
   document.getElementById("refreshPostResults").innerHTML += xhttp.responseText;
};


现在我将有一个带有以下onclick事件的按钮:

<button type="button" onclick="submitAjax({'addViewCount': 29});refreshPostResults()">


这两个函数都将像正常调用一样工作,函数没有任何问题,但是,refreshPostResults将在post.php上的脚本完成运行和更改Session变量/数据库之前运行。因此,当按下按钮时,前端似乎什么也没发生,但如果您查看会话变量或查看数据库,您会看到后端一切正常。
所以我想问是否有人对此有解决方案,最好是一个不需要我更改submitAjax的解决方案,因为它在整个网站中使用,几乎每个页面都有超过30个submitAjax调用。另外,我确实考虑过使用php中的Settimeout()函数,只是如果客户端的Internet连接不好,使用该函数仍然会发生同样的事情,因此执行submitAjax调用将花费时间

wribegjk

wribegjk1#

JavaScript和 AJAX 调用是异步的。这意味着它们在等待服务器响应时不会阻止代码的其余部分执行。在本例中,refreshPostResults()在submitAjax()之后立即被调用,而不等待AJAX请求完成。
你可以通过将 AJAX 函数放在promise中来解决这个问题。

function submitAjax(Data){
    return new Promise((resolve, reject)=> {
        $.ajax({
            type: "POST",
            url: window.location,
            data: Data,
            datatype: 'json',
            success: function (result) {
                resolve(result)
            },

            error: function (error) {
                reject(error)
            },
        });
    });
}

字符串
然后使用另一个函数来调用你 AJAX 脚本:

function submitData(){
    submitAjax({'addViewCount': 29})
    .then(() => {
        refreshPostResults();
    })
    .catch((error) => {
        console.error(error);
    });
}

<button type="button" onclick="submitData()">

相关问题