我正在进行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(我在每个页面中包含)中,我有一个代码来读取会话[&#39; flash&#39;],显示相关的消息,然后销毁它。在我的页面中,我有一个php条件,它会照看会话[&#39; auth&#39;] - &gt; mission_id并根据它显示内容。
我愿意在php代码完全完成后刷新页面,以便显示会话flash并考虑会话mission_id发生的条件。
问题在于,当我执行我的Ajax代码时,页面会重新加载,但是如果php会话(flash和mission_id)没有准备就绪。我必须手动重新加载以查看更改。
我尝试使用完整而不是成功的解决方案,甚至setTimeout但它没有用。
我知道PHP有效,因为我可以看到我的数据库发生了PHP的变化。
我试过了:
$.ajax({
type: "POST",
url: "myPHP.php",
data: myDatas,
success: setTimeout(window.location.reload(), 3000)
});
以及其他一些东西。
感谢您的帮助。
答案 0 :(得分:2)
在这两个方面......
success: window.location.reload()
success: setTimeout(window.location.reload(), 3000)
... reload
之后的括号立即调用方法。向success:
或setTimeout()
提供的内容是方法的return
值,类似于:
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
的含义,并且可能需要事先约束它。
success: window.location.reload.bind(window.location)
答案 1 :(得分:1)
$.ajax({
type: "POST",
url: "myPHP.php",
data: myDatas,
success: function () {
setTimeout(window.location.reload(), 3000)
}
});
或
$.ajax({
type: "POST",
url: "myPHP.php",
data: myDatas,
success: function () {
window.location.reload()
}
});
答案 2 :(得分:0)
数据:mydatas! mydatas是您将发送到PHP脚本的数据。所以你可以像这样指定你的变量名和数据:
var name=document.getElementById('name').value;
data:"name="+name+"age="+age