我是开发网站的新手,我正在开发一个小型网站。在这里,我使用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)。但是,当我提醒ajax部分上方的id(div的id)时,我得到了正确的id。那么我如何才能暂停循环直到ajax函数结束。很抱歉我的英语不好,请帮助我
尝试将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
等于循环中的最后一个值。
错误似乎是您从未在脚本中第一次调用函数show_comments()
-
我建议你在称之为时使用它
setInterval(show_comments(),5000)
并从show_comments()
中删除setTimeOut()
- 或者,您可以只保留
setTimeOut()
并在脚本路径或要调用它的函数中调用show_comments()