我創建了一個類似於社交媒體的小應用,人們可以在其中創建「狀態更新」並對其進行評論。我使用PHP從數據庫中提取所有「狀態更新」,並使用PHP的foreach()
循環顯示它們。jQuery AJAX在呼叫成功後再次加載確切的div
我的目標是每次用戶發佈評論時,它都會將評論存儲在數據庫中而不刷新頁面(明顯),然後再次加載ul.comments。問題是,因爲我使用foreach()循環獲取這些狀態更新,所以有幾個ul.comments,我的當前JS腳本無法確定哪些ul.comments需要更新。
這裏是我的加價部分(僅註釋部分):
<?php if($comments = $this->comment_model->getComments($event['event_id'])):?>
<?php foreach($comments as $comment):?>
<ul class="comments">
<li>
<a href="<?=base_url()?>user/<?=$comment['user_id']?>">
<img class="comment-img" src="<?=base_url()?>public/images/uploads/<?=$comment['profilepic']?>" alt="prof-img"/>
</a>
<a href="<?=base_url()?>user/<?=$comment['user_id']?>">
<span class="comment-name"><?=$comment['name']?></span>
</a>
<span class="comment-comment"><?=$comment['comment']?></span>
<?php if($comment['user_id'] == $this->session->userdata('user_id') || $this->session->userdata('user_type') == 1):?>
<a href="<?=base_url()?>comments/delete/<?=$comment['id']?>">Delete</a>
<?php endif?>
<span class="comment-date"><?=date('d.m.Y G:i', strtotime($comment['commented_at']))?></span>
</li>
</ul>
<?php endforeach ?>
<?php endif?>
這是我的AJAX調用張貼評論:
$("form.add-comment").on('submit', function(e) {
var from = $(this);
$.ajax({
url: from.attr('action'),
type: from.attr('method'),
data: $(from).serialize(),
dataType: 'json',
beforeSend: function() {
from.find(".comment_submit").hide();
from.find("#spinner_comment").show();
},
success: function(data) {
if(data.st == 0) {
for(var key in data.msg) {
console.log(data);
}
}
if(data.st == 1) {
$("#event_comment").val('');
$.get(window.location,function(data){
$data = $.parseHTML(data);
$("ul.comments",from).html($("ul.comments",$data).html());
});
}
}, complete: function() {
from.find("#spinner_comment").hide();
from.find(".comment_submit").show();
}
});
e.preventDefault();
});
而這裏的我的CI控制器/張貼評論的方法
public function add() {
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$this->form_validation->set_rules('event_comment', 'Comment', 'required|htmlspecialchars');
if($this->form_validation->run() === false) {
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('st' => 0)));
return false;
} else {
$data = array (
'event_id' => $this->input->post('event_id'),
'user_id' => $this->session->userdata('user_id'),
'comment' => $this->input->post('event_comment')
);
$add_comment = $this->comment_model->addComment($data);
}
if($add_comment === true) {
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('st' => 1)));
return false;
} else {
$this->output->set_content_type('application_json');
$this->output->set_output(json_encode(array('st' => 0)));
return false;
}
}
}
沒什麼..這將它添加到數據庫中,但我只能看到新的評論,如果我刷新頁面。在「開發者工具」中,如果我打開「網絡」>「預覽」選項卡,我只能查看從服務器獲得的JSON – Cooper 2014-09-24 01:23:46
看看我的編輯,不知道我是否清楚 – 2014-09-24 01:26:44
在您的控制檯中,它是在帖子後獲取網址嗎? – 2014-09-24 01:27:25