CodeIgniter - 使用setInterval自动从数据库获取数据

时间:2017-04-24 10:18:29

标签: javascript php jquery ajax codeigniter

在codeigniter中,我想在不重新加载页面的情况下自动显示数据库中的更改,因此我使用ajax在我的视图中运行控制器功能。我使用listen_auth一遍又一遍地运行该函数,直到控制器函数<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> 返回1并且视图显示为1。

查看:

listen_auth()

这是我的CONTROLLER中的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}}变量只会在页面重新加载后更改...我做错了什么?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

你需要声明$ isAuth并在ajax请求中赋值,因为php变量在没有服务器请求的情况下不会改变它的值。

答案 1 :(得分:1)

来自服务器'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>