【问题标题】:Setting session variable using ajax使用ajax设置会话变量
【发布时间】:2014-08-25 22:51:31
【问题描述】:

我正在使用 Ajax 调用将 ID 传递给一个只更新会话变量 (ID) 的小 php 文件。然后,我使用另一个 php 文件打开一个新选项卡,该文件通过在 MySQL 中引用特定于该 ID 的信息填充页面。 ajax 调用成功。网络流量显示代码 200。然后我在新选项卡中打开新页面。但发送的 ID 从未到达 $_POST['ID'] 数组元素。

ajax 代码由捕获当前 ID 值的单击事件触发。 .

var pkg = {ID:ID};
    $.ajax({
    type: "POST",
    url: "../php-main/updateSessionIDVar.php",
    data: pkg,
    success: console.log("ID value from ajax post:" + ID), // this shows OK
    error:function(jqXHR, textStatus, errorThrown){
        console.log("Error type" + textStatus + "occured, 
        with value " + errorThrown)
        }
    });
window.open('partEdit.php','_blank');

updateSessionIDVar.php 文件。 .

<?php 
if (session_status() == PHP_SESSION_NONE) session_start();  

if (isset($_POST['ID'])) {  //this test always fails
    $ID=$_SESSION['currID']=$_POST['ID'];
}
else $_SESSION['currID']='63'; // Dummy val so I can test the rest of my code 
$user=$_SESSION['userID'];    
?>

创建新页面“partEdit.php”的 php 文件的开始。 .

<?php   if (session_status() == PHP_SESSION_NONE) session_start(); 
    $ID=$_SESSION['currID'] ;
    $user=$_SESSION['userID'];
?>
<html> etc.

我已经阅读了其他几个与 SO 相关的主题,但似乎没有一个适合。任何建议表示赞赏。

【问题讨论】:

  • 你在js中验证过你做pkg的时候设置了ID吗?
  • isset 会失败对我来说没有意义。但是,你还有另一个问题。 partEdit 的 window.open 将在 post to updateSessionIDVar 完成之前发生。如果您依赖它在 partEdit 之前运行,您应该在您的 ajax 请求的成功函数中移动它。
  • @BarbaraLaird 好问题。是的,我刚查过。它显示为 ID:“75”,这是一个有效的键值对。
  • @BarbaraLaird 我想我试过了,但现在让我再做一次。这似乎是一个可能的比赛时间问题,但不确定。
  • @BarbaraLaird window.open 在成功回调中没有任何区别。 php-main/updateSessionIDVar.php 仍然只是将 ID 设置为 63。

标签: php jquery mysql ajax session-variables


【解决方案1】:

在重新阅读了几个相关问题后,我完全放弃了 Ajax 调用,并尝试在 window.open 函数的主体中发送 var partID。像这样:

window.open('partEdit.php?partID='+partID, target='_blank');

使用这种策略,在 partEdit.php 文件中,我能够访问 $_GET 数组以找到 partID 的值。

$partID=$_GET['partID'];

虽然我仍然不明白为什么使用 Ajax 调用发布 partID 的值不起作用,但它完成了这项工作。我认为我的问题在于清楚地了解 $_POST[] var 在“会话”期间如何设置和清除,其中可能有多个域选项卡可用,用户可以在它们之间单击鼠标并打开新选项卡(或窗口) .

恐怕我现在都不知道怎么问这个问题了。但是,如果有人知道我在哪里可以找到一个很好的参考资料来详细解释服务器和活动窗口之间的数据传输领域,请将链接(或书名)放在评论中。这么多天了,我还没有找到明确的解释。

【讨论】:

    【解决方案2】:

    你所做的一切似乎都很好。如果任何会话变量发生变化,请尝试刷新页面。这样缓存/加载的东西就会焕然一新。

    【讨论】:

      猜你喜欢
      • 2015-10-10
      • 2018-04-04
      • 1970-01-01
      • 2016-03-12
      • 2013-02-09
      • 2017-01-02
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      相关资源
      最近更新 更多