【问题标题】:Set PHP session with AJAX not working使用 AJAX 设置 PHP 会话不起作用
【发布时间】:2016-04-07 21:07:00
【问题描述】:

经过一周的反复试验和大量阅读,我仍然无法正常工作。
我想做的事: 我有一个包含 24 个产品页面的网站。每种产品都有“经典”或“现代”可供选择。每个页面都有一个可点击的按钮,可以在一个页面和另一个页面之间切换(本质上显示不同的 img)。如果用户单击以查看“现代”中的产品 A,然后转到产品 B,我希望他们直接看到“现代”版本而无需再次单击(默认显示为“经典”)。我认为 SESSION 正是我所需要的。
我的代码(我在两个页面的顶部都使用了 session_start()):

产品A页面:

<?php
$_SESSION["collection"] = ""; 

?>

<script> 
function ClasstoMod(){
        $(".classique, .moderne").toggle(); // toggles the images, it's working
        }
</script>
<script>
$(document).ready(function() {

$( "#display-moderne" ).click(function() {
        request = 
            $.ajax({
                url: "classtomod.php",
                type: "post",
                data: 'moderne'
                });
        // callback handler that will be called on success 
        request.done(function (response, textStatus, jqXHR){            
        // log a message to the console 
        console.log("Hooray, it worked!");      });         
        // callback handler that will be called on failure  
        request.fail(function (jqXHR, textStatus, errorThrown){             
        // log the error to the console 
        console.error(              "The following error occured: "+                textStatus, errorThrown             );          }); }); 
});
</script>
<html>
<div id="display-moderne" class="classique" href="#" onclick="ClasstoMod();">Check out the new Moderne Line!</div>
    <div id="display-classique" style="display:none;" class="moderne" href="#" onclick="ClasstoMod();">Return to our Classique Line!</div>
</html>

classtomod.php

<?php
$_SESSION['collection'] = $_POST['data'];

?>

产品 B 页面,目前我只是尝试呼应正确的“集合”,稍后我将处理 JS 以显示正确的图像!

<?php 
echo "Collection = " .$_SESSION['collection']; 
?> 

控制台日志成功,但是页面 B 上的回显没有回显新的 SESSION。 如果我如图所示运行它,它只会回显“Collection =”
如果我在页面 A 上定义 $_SESSION['collection'] = "test",页面 B 会按预期回显“Collection = test”,因此该部分正在工作。
我想要的是,在我点击#display-moderne 后,页面 B 会回显“Collection = moderne”

我想我已经接近了,感谢任何帮助!

【问题讨论】:

  • PHP 脚本中缺少session_start();
  • 您可能还想查看本地存储或 cookie,除非您确实需要让服务器保持会话的理由。
  • @Barmar 我在所有页面的顶部都有 session_start,在文档类型之前。
  • @Rob,你认为 cookie 更容易“让它发挥作用”吗?还是只是更好的做法?
  • 我会说更好的做法。当它基于用户偏好时,服务器真的没有理由保持这个会话。本地存储或 cookie 都可以,但是,本地存储兼容性虽然更好,但并非在所有浏览器中都使用。

标签: javascript php jquery ajax session


【解决方案1】:

您在 AJAX 调用中缺少 POST 参数的名称。应该是:

data: { data: 'moderne'}

data: 'data=moderne'

【讨论】:

  • 好吧,你去吧,我知道这很简单。谢谢你!效果很好,现在可以根据会话显示正确的 div。
猜你喜欢
  • 2016-07-06
  • 1970-01-01
  • 2017-03-17
  • 2018-04-04
  • 2018-06-13
  • 2012-08-04
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多