【问题标题】:How to access php session data inside template files jquery code如何访问模板文件jquery代码中的php会话数据
【发布时间】:2021-02-24 09:23:27
【问题描述】:

我有一个 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 代码部分所示,我尝试获取它,但是当我使用警报输出变量时,我得到的只是“未定义”。

请帮忙。

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代码中访问。

【问题讨论】:

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

标签: php jquery ajax templates


【解决方案1】:

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

通常您会在阵列上使用json_encode(),然后将其输出到屏幕上。但是正如您所评论的,您使用的是 php 7,因为这不仅可以提高性能,还可以提高安全性。

如果您无法升级到 PHP 5 以上的 PHP 版本,那么您可以使用变通方法。在这个question 上已经有解决方法的答案,workaround 可以在 PHP 手册中找到。

您应该可以使用返回的 JSON 数据。

【讨论】:

  • 我已经添加了讨论中的方法。 echo array_to_json($returnVal); 路过。但是没有成功的repsonse。当我从 ajax 代码中删除 dataType: 'json', 时,警报返回未定义。我错过了什么吗?
  • 尝试在您的数据上使用 console.log() 而不是警报,并在控制台中查看它返回的内容。 console.log(data);@Akhilpaul
  • 在 jQuery dataType: 'json' 中自动将 JSON 转换为对象。因此,要获得 myVar 的值,您可以使用 console.log(data.myVar)alert(data.myVar)
  • 如果没有调用succes,那么可能有错误。您可以使用error: function() {} 获取错误响应
【解决方案2】:

修改后回复

现在你的数据是 JSON 格式,但 JS 仍会将其视为字符串。在你的成功函数中,你仍然需要解析它。

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

我还必须补充一点,继续使用 php

【讨论】:

    猜你喜欢
    • 2011-05-20
    • 2013-11-21
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 2014-06-10
    • 1970-01-01
    相关资源
    最近更新 更多