我的网站标题中有消息块。当用户单击“关闭消息”时,该消息应消失,并且在当前用户会话期间无法看到。 所以我决定使用jQuery Ajax:
$('#lang-msg .close').on('click', function(event) {
event.preventDefault();
$.ajax({
url:"remlmsg.php",
type:"POST",
data:"id=2,myajaxquery=true ",
success:function(html){
console.log(html);
$('#lang-msg').fadeOut(300,function() {
$(this).remove();
})
}
})
})
在 remlmsg.php 中我只有代码,它定义了新的会话变量:
$_SESSION['langmsg'] = 'hide';
echo $_SESSION['langmsg'];
在header.php文件中,我检查 $ _ SESSION ['langmsg'] 是否未定义。
if (!isset($_SESSION['langmsg'])) {
if ($sLanguage == 'ru') {
echo '<script type="text/javascript">
$( function() {
showLangMessage("en");
})
</script>';
}
}
它总是如此!但是当我在ajax函数中打印请求数据时,它会显示“隐藏”。 请向我解释,我错了。
P.S。 在本地服务器上测试(最新的WAMP)
答案 0 :(得分:2)
您需要先声明session_start()
。否则,您只会编辑一个未存储在任何地方的局部变量。
答案 1 :(得分:0)
实际上你遇到的问题是ajax调用会有不同的会话ID,这与双方发送/接收的标题有关。
尝试使用PHP生成一些javascript:
var phpSessionId='<?=session_id()?>';
然后在你的remlmsg.php中添加到最顶层:
if(isset($_POST['session-id'])) session_id($_POST['session-id']);
session_start();
最后在你的ajax调用中使用:
data:"id=2,myajaxquery=true,session-id=" + phpSessionId,
这应该可以解决你的问题。