所以我正在CRM中构建一个集成的聊天应用程序。每当登录的用户单击联系人时,它都会使用Ajax调用显示两个用户之间的聊天历史记录,这就是问题的开始。
这是我的Ajax调用代码:
function GetChatHistory(receiver_id){
$.ajax({
dataType : "json",
url: '/chat/get_chat_history_by_user',
data:{receiver_id:receiver_id},
success:function(data)
{
$('#chathistory').html(data);
ScrollDown();
},
error: function (jqXHR, status, err) {
// alert('Local error callback');
alert("error fetching")
}
});
}
这是我的控制器
public function get_chat_history_by_user(){
//get the receiver id
$receiver_id = $this->input->get('receiver_id');
//get the sender id
$Logged_sender_id = $this->session->userdata['user_id'];
$history = $this->chat_model->GetReciverChatHistory($receiver_id);
foreach($history as $chat):
$message_id = $chat['id'];
$sender_id = $chat['sender_id'];
$userName = $this->UserModel->GetName($chat['sender_id']);
$userPic = $this->UserModel->PictureUrlById($chat['sender_id']);
$messagebody = $chat['message'];
$messagedatetime = date('d M H:i A',strtotime($chat['message_date_time']));
?>
<?php if($Logged_sender_id!=$sender_id){?>
<!-- Message. Default to the left -->
<div class="direct-chat-msg">
<div class="direct-chat-info clearfix">
<span ><?=$userName;?></span>
<span ><?=$messagedatetime;?></span>
</div>
<!-- /.direct-chat-info -->
<div class="direct-chat-text">
<?=$messageBody;?>
</div>
<!-- /.direct-chat-text -->
</div>
<!-- /.direct-chat-msg -->
<?php }else{?>
<!-- Message to the right -->
<div class="direct-chat-msg right">
<div class="direct-chat-info clearfix">
<span ><?=$userName;?></span>
<span ><?=$messagedatetime;?></span>
</div>
<!-- /.direct-chat-info -->
<div class="direct-chat-text">
<?=$messageBody;?>
</div>
<!-- /.direct-chat-text -->
</div>
<!-- /.direct-chat-msg -->
<?php }?>
<?php
endforeach;
}
视图的简单版本和我想在其中插入数据的div:
<div id="chathistory"></div>
请注意,模型写得正确(我确实测试了它们(,调用写得正确,因为每当我删除foreach循环并将其添加到我的控制器时:
echo json_encode($history);
然后控制台将数据记录在我的ajax调用中,我可以毫无问题地获得完整的聊天历史记录。所以我的猜测是foreach循环和html渲染有问题!
此外:我确实在github上查看了一些简单的网络应用程序聊天,他们确实用同样的方式编写了控制器,它对他们来说非常好。那么你认为问题出在哪里呢?
dataType : "json"
告诉jQuery在响应中期望JSON,但您从控制器返回HTML。因此,当它试图将HTML解析为JSON时,可能会抛出一个错误。删除该行,或指定
dataType: "html"
而是