Php 无法保留Ajax保留的会话变量
我试图编写代码,将会话变量从一个php带到另一个php,而无需刷新。我试着仿效我在网上找到的例子,如下所示。在加载ajax页面时,它似乎成功地带来了价值。但是,即使使用Php 无法保留Ajax保留的会话变量,php,ajax,session-variables,Php,Ajax,Session Variables,我试图编写代码,将会话变量从一个php带到另一个php,而无需刷新。我试着仿效我在网上找到的例子,如下所示。在加载ajax页面时,它似乎成功地带来了价值。但是,即使使用session\u start()命令,创建的会话变量似乎也无法保留。它不加载数据,而是显示以下错误消息: 注意:第5行C:\xampp\htdocs\test\update.php中未定义的索引:numSum 如果有人能建议如何处理代码以使其正确,我将不胜感激 index.php <html> <?php
session\u start()
命令,创建的会话变量似乎也无法保留。它不加载数据,而是显示以下错误消息:
注意:第5行C:\xampp\htdocs\test\update.php中未定义的索引:numSum
如果有人能建议如何处理代码以使其正确,我将不胜感激
index.php
<html>
<?php
session_start();
?>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
j_TOC = [1,2,3,4,5];
$.ajax({
method: "POST",
url: "update.php",
data: { numSum: j_TOC}
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});
</script>
</html>
<html>
<?php
session_start();
session_save_path('/session_data/');
$_SESSION['numSum1'] = $_POST['numSum'];
?>
<script type="text/javascript">
function atest() {
var id_toc = <?php echo json_encode($_SESSION['numSum1']); ?>;
window.alert(id_toc);
{
</script>
<input type="button" id="clickme" onclick="atest()" value="update session"></>
</html>
j_TOC=[1,2,3,4,5];
$.ajax({
方法:“张贴”,
url:“update.php”,
数据:{numSum:j_TOC}
})
.done(函数(msg){
警报(“保存的数据:“+msg”);
});
update.php
<html>
<?php
session_start();
?>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
j_TOC = [1,2,3,4,5];
$.ajax({
method: "POST",
url: "update.php",
data: { numSum: j_TOC}
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});
</script>
</html>
<html>
<?php
session_start();
session_save_path('/session_data/');
$_SESSION['numSum1'] = $_POST['numSum'];
?>
<script type="text/javascript">
function atest() {
var id_toc = <?php echo json_encode($_SESSION['numSum1']); ?>;
window.alert(id_toc);
{
</script>
<input type="button" id="clickme" onclick="atest()" value="update session"></>
</html>
函数atest(){
变量id_toc=;
窗口警报(id\U toc);
{
session\u save\u path()
应该在session\u start()
之前调用,如果要使用它,请在使用session\u start()的地方同时使用它
update.php
应该只为alert()
返回一个字符串。当您直接加载该页面时,$\u POST
为空,因此这就是您看到的错误。您的代码很少有问题,例如:
- 正常代码流:当您第一次访问index.php时,它将触发AJAX请求,并随后设置会话变量;因此,当您访问update.php页面时,您将获得所需的结果
- 您的代码流:如上所述,如果您不首先访问index.php而直接访问update.php页面,您将得到此错误
注意:未定义索引:numSum in
这是因为没有设置
$\u POST['numSum']
,事实上,整个超全局$\u POST
数组是空的
所以解决方案是这样的
将此语句$\u SESSION['numSum1']=$\u POST['numSum'];
包装在if
块中,如下所示:
if(!isset($_SESSION['numSum1']) || empty($_SESSION['numSum1'])){
$_SESSION['numSum1'] = isset($_POST['numSum']) ? $_POST['numSum'] : array();
}
- 代码中还有一个小语法错误
function atest() {
var id_toc = <?php echo json_encode($_SESSION['numSum1']); ?>;
window.alert(id_toc);
{ <============ See here, it should be }
另外,了解PHP中的比较运算符,特别是三元运算符。您所说的问号(?:
)与三元运算符有关。以下是必要的参考资料
- (比较运算符)
- (三元运算符)
感谢您的及时回复。您能在不设置会话路径的情况下完成吗?您能告诉我如何优化代码,以便在页面之间传递值吗?我正在尝试使用此代码处理发布问题:if($_session['numSum1']==“”){$_session['numSum1']=$_POST['numSum']}或者{echo$_session['numSum1']}非常感谢这个解决方案。它在某种程度上是文字。我现在可以在update.php上获得会话变量数据。但是,它不能更改。特别是。当我将j_TOC更改为2,2,3,4,5时,例如在index.php中,并重新加载index.php,update.php仍然会给我1,2,3,4,5。有什么解决方案吗?另外,你能解释一下吗更详细地说,你提供的语法,就像我对PHP的新意。具体来说,在语句中间的“?”的含义是什么?“$ySale[ [ NUMUM1’] ] = ISSET($XPOST [ NUMUSEM ])?$$POST [ NUMSON' ]:ARARYY();“和”$POST(NUMSORT):“ARRAY())的含义是什么??最后,我看到您的整个语句似乎在检查会话变量是否为空或是否存在,并且从未看到您将$\u POST值分配给会话变量,哪个语句实际上占用了这项工作?非常感谢!@CL.L我已经更新了我的答案,请查看我答案的编辑部分。非常感谢,现在我理解了ternary运算符。我可以有一个后续问题吗?我理解您的代码是有效的,但只有在update.php刷新之后。但是,我们是否可以在不刷新update.php页面的情况下更新该值,而只需单击“更新会话”即可按钮?或者我们必须刷新页面以运行php部件才能使其正常工作?@CL.L会话变量只能通过index.php页面更新,因为这是传递新值的地方,而不是数组。如果单击更新会话按钮,它将只显示$\u会话['numSum1'中的任何内容
,就是这样。如果要更新update.php页面上的会话,请单击“更新会话”按钮,制作一个包含新会话值和此“更新会话”按钮的表单,并在表单处理过程中更新$\u会话['numSum1']
。