所以我有一个用来提交给 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调用将花费时间
1条答案
按热度按时间wribegjk1#
JavaScript和 AJAX 调用是异步的。这意味着它们在等待服务器响应时不会阻止代码的其余部分执行。在本例中,refreshPostResults()在submitAjax()之后立即被调用,而不等待AJAX请求完成。
你可以通过将 AJAX 函数放在promise中来解决这个问题。
字符串
然后使用另一个函数来调用你 AJAX 脚本:
型