我有一个更新$_SESSION
变量的AJAX调用,之后<script>
应该回显新变量。数据到达.php页面,并且还存储在会话中。但它在AJAX通话后警告旧数据
我已尝试使用setTimeout
,并尝试移动在AJAX
成功通话之外提醒新变量的通话。我仍然得到相同的结果。
为什么不警告新的$_SESSION
数据?
AJAX
<script>
$(function() {
$('#sendBtn').click(function() {
var theva = $("#element_23").val();
$.ajax({
type : "POST",
url :'check.php',
data : {theva : theva},
success: function() {
setTimeout(function() {
var theva2 = "<? echo $_SESSION['disp'];?>";
alert(theva2);},3000);}
});
});
});
</script>
check.php
<?
if($_POST){
$_SESSION['disp'] = $_POST['theva'];}
?>
答案 0 :(得分:3)
var theva2 = "<? echo $_SESSION['disp'];?>";
这一行包含php代码,只会在页面加载时呈现。如果您刷新页面并查看源代码,您将看到我已更新。
不确定你想要实现的目标,但这是一个逻辑错误
根据您的评论编辑
您可以从check.php返回值:
<?
if($_POST){
$_SESSION['disp'] = $_POST['theva'];
echo 'Session value is now: '.$_SESSION['disp'];
}
?>
并改变你的js成功函数以提醒数据:
success: function(data) {
alert(data);
});
答案 1 :(得分:1)
因为PHP是在服务器上呈现的。当您加载包含AJAX请求的页面时,将解释PHP代码,然后theva2
将包含您的会话变量。
之后您可能会更改它,但由于主页面(包含AJAX代码)永远不会重新加载,它仍会显示旧值(因为它在您加载页面时呈现为服务器端,而不是在您创建AJAX时请求)。