如何等待for循环直到ajax调用结束

时间:2016-04-06 15:27:38

标签: javascript php jquery html ajax

我是开发网站的新手,我正在开发一个小型网站。在这里,我使用ajax来显示新评论。这是我写的功能

function show_comments() {
$('div#P_all_posts>div').each(function () {
    id = this.id.replace("post", "");
    $.ajax({

        url: 'http://localhost/seppro/index.php/group/show_comments',
        type: 'post',
        data: {
            id: id
        },
        success: function (data) {

           document.getElementById("cmnt"+id).innerHTML=data;

        },
        error: function (err, req) {
            alert(err)
        },
        async: false
    });

});
setTimeout("show_comments()", 5000);
}

PHP

模型

public function showcmnts(){ 
    $sql="select * from tbl_cmnt 
          where postid='".$this->input->post("id")."'"; 
    $query = $this->db->query($sql); return $query->result(); 
}

控制器

 public function show_comments(){
    $data['cmntlist'] = $this->Group_model->showcmnts();
    $this->load->view('group/grp_cmnts', $data);
}

视图

foreach ($cmntlist as $cmnt):
echo $cmnt->comment . "<br>";
endforeach;

即使我在ajax成功函数中设置async: false,我也只能在ajax成功函数中获取最后一个id(最后一个div的id)。但是当我提醒上面的id(id的id)时ajax部分我得到了正确的id。所以我怎么能暂停循环直到ajax函数完成。我的英语不好请帮帮我

2 个答案:

答案 0 :(得分:0)

错误似乎是因为您从未在脚本中第一次调用函数show_comments()

  1. 我建议你在打电话时使用它

    setInterval(show_comments(),5000)

  2. setTimeOut()

    中删除show_comments()
    1. 或者您可以保留setTimeOut()并在脚本路径或您将要调用的函数中调用show_comments()

答案 1 :(得分:0)

尝试将ajax调用包装到立即调用的函数并将id传递给它:

    $('div#P_all_posts>div').each(function () {
        id = this.id.replace("post", "");
        (function(id) {
            $.ajax({

                url: 'http://localhost/seppro/index.php/group/show_comments',
                type: 'post',
                data: {
                    id: id
                },
                success: function (data) {

                    document.getElementById("cmnt" + id).innerHTML = data;

                },
                error: function (err, req) {
                    alert(err)
                },
                async: false
            });
        })(id)
    });

似乎你的id var是全局的,并且在每个循环上它都会重写它的值,并且在ajax完成时,id等于循环中的最后一个值。