Переменная контроллера Codeigniter потеряна после изменения

0

У меня есть простой индикатор выполнения jquery, который должен получить переменную от контроллера Codeigniter и распечатать ее на экране. Проблема в том, что когда функция меняет эту переменную, результат теряется, поэтому индикатор выполнения показывает 0.

Вот мой код:

class Emails extends CI_Controller {

public $p;
...

public function test()
{
    for ($i=0; $i < 1000000; $i++)
    { 
        $this->setprogress($i);
    }
}
public function setprogress($value)
    {
        $this->p = intval($value); 
}

public function progress()
{
    print $this->p;
}

В jquery

function getProgress(){
    $.get('<?=site_url("/emails/progress"); ?>', function(data) {
        percent = (parseInt(data));
    });
}

$(document).ready(function(){
    $.get('<?=site_url("/emails/test"); ?>', function(parsing) {});
    interval = setInterval(getProgress, 100);
});

Переменная прогресса всегда возвращается пустой (NaN). Какие-либо предложения? Большое спасибо, ребята.

  • 0
    С этим кодом я не могу понять, в чем проблема, вы просто печатаете $ this-> p, но вы не устанавливаете его, вы получаете / emails / progress, но я не вижу, где вы устанавливаете переменная $ this-> p; Просто сделайте $ this-> p = 1; перед печатью $ this-> p; просто отладить
  • 0
    В DOMReady через ajax я вызываю функцию test (), которая устанавливает $ this-> p в соответствии с циклом for в нем.
Показать ещё 3 комментария
Теги:
codeigniter
progress-bar

2 ответа

1
Лучший ответ

Это правильное решение. Благодаря Хорхе Файанке за большой намек

public function __construct()
{
    parent::__construct();
    $this->load->library('session');
}

public function test()
{
    for ($i=0; $i < 100; $i++) { 
        $this->setprogress($i);
    }
}

function setprogress($value)
{
    $this->session->set_userdata('progress', intval($value)); 
}

public function progress()
{
    print $this->session->userdata('progress'); 
}
0

Как я объяснял в комментарии, вы можете сделать это, таким образом. (используйте сессионную библиотеку от Code Igniter вместо родной)

 public function test() { for ($i=0; $i < 1000000; $i++) { $this->setprogress($i); } } public function setprogress($value) { $_SESSION['progress'] = intval($value); } public function progress() { echo $_SESSION['progress']; }

  • 0
    Вы забыли start_session() над кодом.
  • 1
    Это CodeIgniter приятель. Я уверен, что это уже делает это для вас.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню