无法在聊天应用中使用 Ajax 调用从控制器返回 html



所以我正在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" 

而是

相关内容

  • 没有找到相关文章

最新更新