如何访问模板文件中的php会话数据jquery代码

How to access php session data inside template files jquery code

提问人:Akhil paul 提问时间:2/24/2021 最后编辑:Akhil paul 更新时间:2/25/2021 访问量:43

问:

我有ajax,它从模板文件调用一个名为“fetch_quarter_limit.php”的php文件。

     $.ajax({

         type: 'POST',
         url: 'fetch_quarter_limit.php',
         data: { 
             leavefrom: from,
             leaveto: to,
             empid: emp
         },
         success: function(data) {
            var quarter_limit = data['myVar'];
            alert(quarter_limit);
         }
     });

在我的 .php 文件中,我尝试将会话数据作为数组返回。 获取所需的数据,存储在会话中并形成数组。

$_SESSION['quarter_limit_mend'] = $quarterLimit;
$returnVal = array('myVar' => $_SESSION['quarter_limit_mend']);
echo $returnVal;

如上面的ajax代码部分所示,我试图获取它,但是当我使用alert输出变量时,我得到的只是“未定义”。

请帮忙。

Ajax 代码已更新,p2:

添加 dataType 会使代码不起作用。

$.ajax({

         type: 'POST',
         url: 'fetch_quarter_limit.php',
         dataType: 'json',
         data: { 
             leavefrom: from,
             leaveto: to,
             empid: emp
         },
         success: function(data) {
             alert(data);
    
         }
 });

如@Tim所述,我已将自定义 json 编码函数添加到我的.php文件中。 它按预期返回 {“myVar”: 2}

echo array_to_json($returnVal);

这是从 php 文件返回的。 但无法在 ajax 代码中访问。

PHP jQuery AJAX 模板

评论

1赞 ADyson 2/24/2021
在回显数组之前,需要将数组编码为 JSON
0赞 Akhil paul 2/24/2021
@ADyson 对不起,我没有添加,让我试试。
0赞 Akhil paul 2/24/2021
@ADyson < 5 中的 php 版本,因此json_encode不可用!
0赞 Akhil paul 2/24/2021
@ADyson 我尝试添加 session_start();,但它仍然输出未定义。
1赞 ADyson 2/24/2021
php version in < 5...那么你需要紧急升级。你已经多年没有支持了。php.net/supported-versions.php .我想你必须手动制作JSON,或者找到一个polyfill。直接在 PHP 中回显数组只会产生警告(或者如果警告被关闭或设置为记录到文件,则不会产生任何警告),因为它无法直接将数组转换为字符串(即使可以,它仍然不是 Javascript 可以读取的有效 JSON)。

答:

1赞 Tim 2/24/2021 #1

您正在数组上使用 echo,这是不可能的。如 PHP 手册中所述,echo 输出一个或多个字符串。

通常你会在阵列上使用,然后将其输出到屏幕上。但正如你所评论的,你正在使用 php < 5。首先,如果可能的话,您应该考虑升级到 PHP > 7,因为这不仅可以提高性能,还可以提高安全性。json_encode()

如果您无法升级到 PHP 5 以上的 PHP 版本,则可以使用解决方法。关于这个问题,已经有了解决方法的答案,解决方法可以在PHP手册中找到。

您应该能够使用返回的 JSON 数据。

评论

0赞 Akhil paul 2/24/2021
我从讨论中添加了方法。 通过这条路。但是没有成功的回报。当我从 ajax 代码中删除时,警报返回为 undefined。我错过了什么吗?echo array_to_json($returnVal);dataType: 'json',
0赞 Tim 2/24/2021
尝试对数据使用 console.log( 而不是警报,并在控制台中查看它返回的内容。 @Akhilpaulconsole.log(data);
0赞 Tim 2/24/2021
在jQuery中,JSON会自动转换为对象。因此,要获得价值,请做或dataType: 'json'myVarconsole.log(data.myVar)alert(data.myVar)
0赞 Tim 2/24/2021
如果未调用成功,则可能存在错误。可用于获取错误响应error: function() {}
0赞 Roboroads 2/25/2021 #2

编辑后回复

所以你现在有你的数据作为JSON,但JS仍然会把它看成一个字符串。在成功函数中,您仍然需要解析它。

success: function(data) {
    jsonData = JSON.parse(data);
    alert(jsonData.myVar);
}

我还必须补充一点,继续使用 php < 7.3 是非常不安全的(截至今天,2021 年 2 月 24 日)