У меня есть простой индикатор выполнения 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). Какие-либо предложения? Большое спасибо, ребята.
Это правильное решение. Благодаря Хорхе Файанке за большой намек
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');
}
Как я объяснял в комментарии, вы можете сделать это, таким образом. (используйте сессионную библиотеку от 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']; }
start_session()
над кодом.