В codeigniter я хочу отображать изменения в базе данных автоматически, без перезагрузки страницы, поэтому я использую ajax для запуска функции контроллера в моем представлении. Я использую setInterval, чтобы запускать функцию снова и снова, пока функция контроллера listen_auth не вернет 1, а в представлении не отобразится 1.

ПОСМОТРЕТЬ:

<h4 class="qr-title" id="status"></h4>

<script>
    var username = <?php echo(json_encode($username)); ?>;

    function checkAuthStatus() {
        setInterval(getStatus, 1000);
    }

    function getStatus() {
        var isAuth = <?php echo(json_encode($isAuth)); ?>;
        $.ajax({
            url: '<?php echo base_url('auth/listen_auth'); ?>',
            type: 'post',
            data: {username:username},
            success: function(data){
                console.log(data);
            }
        });
        document.getElementById("status").innerHTML = isAuth;
    }
</script>

Вот listen_auth() функция в моем контроллере:

public function listen_auth(){
        $username = $this->input->post('username');
        $isApproved = $this->adminmodel->get_auth($username);
        if($isApproved == 1){
            return 1;
        } else{
            return 0;
        }
    }

Проблема в том, что переменная isAuth изменится только после перезагрузки страницы ... Я что-то не так делаю? Или есть ли лучший способ сделать это?

1
user253938 24 Апр 2017 в 13:18

2 ответа

Лучший ответ

Функция с сервера 'listen_auth ()' должна печатать текст, а не возвращать.

public function listen_auth(){
    $username = $this->input->post('username');
    $isApproved = $this->adminmodel->get_auth($username);
    if($isApproved == 1){
        echo 1;
    } else{
        echo 0;
    }
}

А затем получите ответ от сервера в AJAX-запросе:

<script>
var username = <?php echo(json_encode($username)); ?>;

function checkAuthStatus() {
    setInterval(getStatus, 1000);
}

function getStatus() {
    var isAuth = <?php echo(json_encode($isAuth)); ?>;
    $.ajax({
        url: '<?php echo base_url('auth/listen_auth'); ?>',
        type: 'post',
        data: {username:username},
        success: function(data){
            document.getElementById("status").innerHTML = data;
        }
    });

}
</script>
1
ahmetson 24 Апр 2017 в 11:02

Вам необходимо объявить $ isAuth и присвоить его значение в запросе ajax, потому что переменная php не изменит свое значение без запроса к серверу.

1
Ahmed Ginani 24 Апр 2017 в 10:50