2016-10-08 4 views
0

私は簡単な問題を理解できません。 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']内の変数は変更されません。
なぜですか?

+0

なぜ新しい値を割り当てる前に変数を設定解除するのですか?変数を設定解除する必要はありません。通貨の値はデータを送信する前に新しい値になると期待されます。あなたの 'Ajax.php'の' if'文は何もチェックしていない変数が 'true'のようなブール値を持っている場合にのみ、あなたのケースで' if(isset($ _ POST ['currency'])) ' –

答えて

0

私はあなたの変数$(this).data('currency')が設定されていない、とあなたのif ($_POST['currency'])チェックが合格していないと思われるでしょうから、それを行うことができることを確認FOREすることはできません 。

if ($_POST['currency'])の文字列値を送信して理論をテストしてみてください。

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

console.log()を入力して、変数に何かが含まれているかどうかを確認することもできます。

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

Aditionally

あなたは、着信データがどのように見えるかを確認するためにいくつかのPHPのエラーログを実装することができます。

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

    error_log(print_r($_POST,true)); 

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

を指定することができます。結果は同じです。 –

+0

コンソールログとPHPログの結果を共有できますか? –

0

セッションはサーバーに保存され、ユーザーのブラウザーには保存されません。今セッションの所有者は誰かセッションphpの特定のユーザーを識別するために一意のIDを持つPHPSESSIDと呼ばれるCookieを設定します。あなたが関数を呼び出すときsession_start() phpは、そのユーザーのために保存されたセッションを読み込むためにPHPSESSIDを使います。

セッションが正常に動作しているかどうかを確認するには、デフォルトのセッションを設定した後にindex.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へのAJAX呼び出しを行うJavaScript関数を、それを保存することができますよりも、JavaScriptから通貨にアクセスする必要がある場合。

ここでは、JavaScriptでクッキーを保存して読み込む方法を見つけることができます。http://php.net/manual/en/intro.session.php

いくつかのアドバイス: あなたはセッションの設定を解除する必要はありませんhttp://www.w3schools.com/js/js_cookies.asp

ここでは、PHPのセッションの詳細情報を見つけることができますあなたはただそれを上書きすることができます。あなたは、すべてのPHPのバージョンでif($_POST['currency'])を使用していますが、バージョン5.6

関連する問題