我正在进行一个 ajax 调用,如下所示:
$.ajax({
type: "POST",
url: "myPHP.php",
data: 1,
success: window.location.reload()
});
以及一些与之相关的 php :
<?php
// PDO CONNECTION
session_start();
$mission_id = $_POST['mission'];
$_SESSION['auth']->mission_id = $mission_id;
if($pdo->prepare('UPDATE client SET mission_id = ? WHERE id = 1;')->execute([$mission_id])) {
// Creates a session to be read by the header at the page load
$_SESSION['flash']['success'] = 'Good.';
} else {
$_SESSION['flash']['danger'] = 'Problem.';
}
?>
在我的 header.php(我包含在每个页面中)中,我有一个代码可以读取 session ['flash'],显示关联的消息,然后销毁它。在我的页面中,我有一个 php 条件,它负责处理 session['auth']->mission_id 并根据它显示内容。
我愿意在 PHP 代码完全完成后刷新页面,以便显示 session Flash 并考虑 session Mission_id 发生的条件。
问题是,当我执行 Ajax 代码时,页面会重新加载,但就像 php session (flash 和 Mission_id)尚未准备好一样。我必须手动重新加载才能看到更改。
我尝试使用complete而不是success的解决方案,甚至setTimeout,但它不起作用。
我知道 PHP 可以正常工作,因为我可以看到 PHP 在我的数据库中发生的更改。
我尝试过:
$.ajax({
type: "POST",
url: "myPHP.php",
data: myDatas,
success: setTimeout(window.location.reload(), 3000)
});
还有其他一些东西。
感谢您的帮助。
最佳答案
在这两个方面...
success: window.location.reload()
success: setTimeout(window.location.reload(), 3000)
...reload
后的括号立即调用该方法。提供给 success:
或 setTimeout()
的是方法的返回
值,类似于:
var _result = window.location.reload();
$.ajax({
type: "POST",
url: "myPHP.php",
data: 1,
success: _result
});
要将调用延迟到事件发生时,您必须直接提供一个函数对象。使用 reload()
等方法执行此操作的一种选择是将其调用包装在另一个函数中。
success: function () {
window.location.reload();
}
或者:
function onSuccess() {
window.location.reload();
}
// ...
success: onSuccess // no calling parenthesis
<小时/>
在某些情况下,直接提供方法也可能有效。
success: window.location.reload
不过,这样做通常会改变方法的 this
含义,并且可能需要预先绑定(bind)它。
success: window.location.reload.bind(window.location)
关于javascript - PHP Ajax 调用结束时刷新当前页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43710084/