2016-10-14 7 views
2

なぜaaaxリクエストが完了したときにcodeigniterセッションが値を更新しないのですか?ajaxリクエストでcodeigniterセッションが更新されない

コントローラインデックス:

public function index() 
{ 
    $this->session->set_userdata('greetings', 'hello!'); 
} 

AJAXリクエスト:

$.ajax({ 
    type: "POST", 
    url: "<?php echo site_url("set_greeting"); ?>", 
    data: data, 
    cache: false, 
    success: function(response){ 
     alert('<?= $this->session->userdata('greetings'); ?>'); 
    } 
}); 

コントローラ:AJAX要求が行われた

public function set_greeting() 
    { 
     $this->session->set_userdata('greetings', 'hi!'); 
     echo $this->session->userdata('greetings'); 
    } 

た後、私は放火犯のコンソールとコントローラの応答をチェックしました"こんにちは!"しかし、ajaxの成功からの警告された価値はまだ "こんにちは"です。このコードは、あなたのAJAXリクエスト...あなたの更新されたセッションの値を参照するには

alert(response); 

使用この前にレンダリングされます

+1

セッションが必要ページの更新を設定されています。その後、あなたはセッション設定値 –

答えて

1

PHPはサーバー側で実行されており、すべてのPHPコードがレンダリングされてからクライアントに何かが送信されるため、alert('<?= $this->session->userdata('greetings'); ?>');alert('hello');にレンダリングされます。あなたは

success: function(response){ alert('<?= $this->session->userdata('greetings'); ?>'); }

を行うと

基本的にAjaxのリクエストが成功した場合helloに警告するために言っています。

PHPはページ更新なしでサーバー側で行われた変更を反映できないため、サーバーセッションに対する変更は表示されませんが、サーバー上で'<?= $this->session->userdata('greetings'); ?>'が再度レンダリングされるため、ページを更新すると変更された値を見ることができますその値はhiに変更されました(しかし、あなたのコードでは、インデックスメソッドで常に値がhelloに設定されているので、セッションの変更を見ることはできません。変更された値は常にページの更新で上書きされますが、その特定のセッション値を設定していない他のコントローラーメソッドでは、変更を反映することができます)。

これはあなたのコードでなぜ発生しますか?

これは、あなたのajaxリクエストにresponseを使用していないために発生します。あなたは正しくサーバーセッションを変更しており、応答も正しくありますが、responseを使用していないので、変更された値は表示されません。

3
alert('<?= $this->session->userdata('greetings'); ?>'); 

+0

を取得します。私は、コード行がAjaxリクエストの成功後にレンダリングされるべきだと思いましたか? –

2

インデックス部に異常がないこと

public function index() 
{ 
    $this->session->set_userdata('greetings', 'hello!'); 
} 

私は次のJavaScriptだけindexページにロードされていることを前提としています。私はalert部分を変更しましたを参照してください。以下のようにset_greetingハンドラのアップデートについては

$.ajax({ 
    type: "POST", 
    url: "<?php echo site_url("set_greeting"); ?>", 
    data: data, 
    cache: false, 
    success: function(response){ 
    alert(response); 
    } 
    }); 

public function set_greeting(){ 

     $this->session->set_userdata('greetings', 'hi!'); 
     $greetings = $this->session->userdata('greetings'); 
     $this->output->set_output($greetings); // Note: set output data here.  
    } 
関連する問題