【发布时间】: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