使用AJAX时为什么不改变$ _SESSION变量(PHP)?

时间:2016-10-08 16:47:56

标签: javascript php jquery ajax session

我无法理解一个简单的问题。是否有网站需要使用AJAX在页面上添加货币更改(RUR / EUR / USD)。我认为最好的选择 - 用$_SESSION选择的货币编写,稍后在我的PHP代码中使用它(显示价格等)。

我的index.php文件:

<?php 
  session_start(); 
  if (!isset($_SESSION['currency'])) $_SESSION['currency'] = 'rouble';
?>

<!-- Links -->
<a href="#" class="currency__change" data-currency="dollar">Dollar</a>
<a href="#" class="currency__change" data-currency="euro">Euro</a>
<a href="#" class="currency__change" data-currency="rouble">Rouble</a>

<!-- Add jQuery and script -->
<script src="jquery-2.2.4-min.js"></script>
<script src="ajax.js"></script>

这是我的ajax.js文件:

;(function($, window, document, undefined) {
  // On document ready.
  $(document).ready(function() {
    // Change currency.
    $('.currency__change').on('click', function(event) {
      // Prevent default.
      event.preventDefault();
      // Send AJAX request.
      $.ajax({
        type: 'POST',
        url: 'Ajax.php',
        data: { 'currency': $(this).data('currency') },
        success: function() {
          location.reload();
        },
        error: function() {
          alert('Error! Try again later.');
        }
      });
    });
  });
})(jQuery, window, document);

现在,我的Ajax.php文件:

<?php
  session_start();
  // Change currency.
  if ($_POST['currency']) {
    unset($_SESSION['currency']);
    $_SESSION['currency'] = $_POST['currency'];
  }
?>

会话正常启动,我在我的服务器上获取会话文件(默认值)并使用正确的标题:

enter image description here

但如果我点击AJAX链接 - $_SESSION['currency']中的变量不要改变。
为什么呢?

2 个答案:

答案 0 :(得分:0)

会话保存在服务器上,而不是用户浏览器上。到目前为止,会话的所有者已保存会话php在用户浏览器中设置一个名为PHPSESSID的cookie,其中包含唯一ID以标识该特定用户。当您调用函数 session_start()时,请使用PHPSESSID为该用户加载已保存的会话。

要检查会话是否正常工作,请在设置默认会话后在Product.ID中添加会话打印。

index.php

如果您需要从javascript访问货币,那么您可以将其直接存储在Cookie中,或者创建一个javascript函数,该函数会对返回存储货币的php进行ajax调用。

在这里,您可以找到如何在javascript中存储和阅读Cookie:http://www.w3schools.com/js/js_cookies.asp

在这里你可以找到关于php session的更多信息:http://php.net/manual/en/intro.session.php

一些建议: 您无需取消设置会话,只需覆盖它即可。 您不能将<?php session_start(); if (!isset($_SESSION['currency'])) $_SESSION['currency'] = 'rouble'; ?> <!-- Currency --> Selected currency: <b><? echo $_SESSION['currency']; ?></b><br> <!-- Links --> <a href="#" class="currency__change" data-currency="dollar">Dollar</a> <a href="#" class="currency__change" data-currency="euro">Euro</a> <a href="#" class="currency__change" data-currency="rouble">Rouble</a> <!-- Add jQuery and script --> <script src="jquery-2.2.4-min.js"></script> <script src="ajax.js"></script> 与所有php版本一起使用,但请确保您可以从5.6版本

进行

答案 1 :(得分:0)

我怀疑您的变量$(this).data('currency')未设置,而if ($_POST['currency'])检查未通过。

尝试仅为if ($_POST['currency'])发送一个字符串值来测试理论。

data: { 'currency': 'Dollar' },

你也可以放入一个console.log()来查看变量中是否有任何内容。

console.log("Anything here?",$(this).data('currency'));

<强>的方法,另外

您可以实现一些php错误记录,以查看传入数据的样子。

<?php
  session_start();
  // Change currency.

  error_log(print_r($_POST,true));

  if ($_POST['currency']) {
    unset($_SESSION['currency']);
    $_SESSION['currency'] = $_POST['currency'];
  }
?>