сеанс codeigniter не обновляется по запросу ajax

почему сеанс codeigniter не обновляет значения, когда выполняется запрос ajax?

контроллер public function index () {$ this-> session-> set_userdata ('greetings', 'hello!'); }:

$.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');
    }

контроллер:

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

после запроса ajax, я проверил консоль firebug и предупреждение контроллера («привет»); echoed "success: function (response) {alert ('<? = $ this-> session-> userdata (' greetings ');?>');}!" но приветственное значение от успеха ajax по-прежнему «<? = $ this-> session-> userdata ('greetings');?> '".

javascript,php,jquery,ajax,codeigniter,

2

Ответов: 3


1 принят

PHP работает на стороне сервера, и весь PHP-код визуализируется перед отправкой чего-либо клиенту, поэтому hiон отображается hello.

Когда вы это сделаете

response

это в основном говорит, чтобы предупредить, responseесли запрос ajax успешно завершен.

поскольку PHP не может отражать какие-либо изменения, сделанные на стороне сервера без обновления страницы, вы не можете видеть изменения, выполненные для сеанса сервера, но если вы обновите страницу, вы сможете увидеть измененное значение, потому что alert('<?= $this->session->userdata('greetings'); ?>'); оно снова отображается на сервере, и теперь его значение равно изменено на hi. (Но в коде вы не сможете увидеть изменение сеанса, так как ваш индексный метод всегда устанавливает значение hello. Измененное значение всегда будет перезаписано обновлением страницы, но если вы используете какой-либо другой метод контроллера в вашей системе, не устанавливает это конкретное значение сеанса, которое вы можете отразить в результате изменения.)

Почему это происходит в вашем коде?

Это происходит потому, что вы не используете alert(response); свой запрос ajax. Вы правильно меняете сеанс сервера, и ответ также верен, но поскольку вы не используете, responseвы не можете увидеть измененное значение. Используйте ответ, и все должно быть хорошо.


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

Этот код будет отображаться перед вашим запросом ajax.

index

используйте это, чтобы увидеть обновленное значение сеанса;


2

Нет изменений в части индекса

alert

Я предполагаю, что следующий javascript загружен indexтолько на страницу. Смотрите, я изменил alertчасть.

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

Для set_greetingобновления обработчика, как показано ниже,

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.    
    }
JavaScript, PHP, JQuery, Ajax, CodeIgniter,
Похожие вопросы