我正在尝试编写代码,将会话变量从一个php转移到另一个php而不刷新。我试着按照我在网上找到的例子如下。它似乎在加载ajax页面时成功地带来了价值。但是,即使我使用session_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>
update.php
<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>
答案 0 :(得分:1)
您的代码存在一些问题,例如:
您的代码流程已经说过上述观点,如果您直接访问 update.php 页面而未访问 index.php 首先,您将收到此错误,
注意:未定义索引:numSum in ...
那是因为没有设置$_POST['numSum']
,事实上,整个超全局$_POST
数组都是空的。
所以解决方案就是这个,
将此语句$_SESSION['numSum1'] = $_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 }
您忘记添加结束括号}
最后,来自the documentation,
...会话数据路径。如果指定,将更改保存数据的路径。为此目的,需要在
session_save_path()
之前调用session_start()
。
按以下方式更改if
块,
if(!isset($_SESSION['numSum1']) || empty($_SESSION['numSum1']) || (isset($_POST['numSum']) && $_POST['numSum'] != $_SESSION['numSum1'])){
$_SESSION['numSum1'] = isset($_POST['numSum']) ? $_POST['numSum'] : array();
}
另外,了解PHP中的比较运算符,尤其是关于三元运算符的运算符。您正在谈论的问号(?:
)与三元运营商有关。以下是必要的参考资料,
答案 1 :(得分:0)
getImage('imgUrl').then(function(successUrl){
//do stufff
}).catch(function(errorUrl){
//do stuff
})
之前调用 session_save_path()
,如果您打算使用它,请在您使用session_start()
session_start()
应该只返回update.php
的字符串。当您直接加载该页面时,alert()
为空,这就是您所看到的错误。