我是开发网站的新手,我正在开发一个小型网站。在这里,我使用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函数完成。我的英语不好请帮帮我
答案 0 :(得分:0)
错误似乎是因为您从未在脚本中第一次调用函数show_comments()
我建议你在打电话时使用它
setInterval(show_comments(),5000)
从setTimeOut()
show_comments()
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
等于循环中的最后一个值。