Javascript 如果用户有新消息,如何使用ajax刷新聊天页面?
现在我用Laravel创建聊天应用程序。通过ajax发送消息后,可以发送消息并刷新messageBox容器。但若我要给他发送新消息,我不能刷新我的聊天伙伴页面,反之,若我的聊天伙伴给我发送新消息,我不能刷新页面。在我的数据库中,我有一个字段,其消息状态为SEED。如果未看到消息,则它将为0或1。如果通过ajax有新消息,如何刷新页面或div内容? 这是我的发送代码:Javascript 如果用户有新消息,如何使用ajax刷新聊天页面?,javascript,php,ajax,laravel,Javascript,Php,Ajax,Laravel,现在我用Laravel创建聊天应用程序。通过ajax发送消息后,可以发送消息并刷新messageBox容器。但若我要给他发送新消息,我不能刷新我的聊天伙伴页面,反之,若我的聊天伙伴给我发送新消息,我不能刷新页面。在我的数据库中,我有一个字段,其消息状态为SEED。如果未看到消息,则它将为0或1。如果通过ajax有新消息,如何刷新页面或div内容? 这是我的发送代码: <script type="text/javascript"> var username; var s
<script type="text/javascript">
var username;
var submitButton;
var textarea;
$(document).ready(function(){
username = $('#username').html();
textarea = $('#texxt');
submitButton = $('.send');
$(textarea).keyup(function(e){
if(e.keyCode == 13){
sendMessage();
$('body').load('').fadeIn('slow');
}
});
});
function sendMessage(){
var message = $('#texxt').val();
var user_id = $('#user_id').val();
if(message.length > 1){
$.post('/message',{
message: message,
id: user_id,
_token:'{{csrf_token()}}'
},
function(data){
$('#texxt').val('');
});
}
}
</script>
要做到这一点,您需要考虑: 所有作业都会触发事件,所以您可以使用此事件向其他用户显示消息,或获取新消息操作。。。但要做到这一点,您需要使用套接字:对于Ajax,您必须定期使用setInterval检查消息是否已到达,如果已到达,则对其进行处理:
setInterval(function(){
$.getJSON("/my_check_message.php",
{user_id: user_id},
function (answer) {
if answer.new_messages.length>0){
//do something
}), 5000)
它假设您从php页面answer.new_messages返回,作为一个数组,您可以有多条新消息
edit5000代表5000毫秒。这将每5秒进行一次检查。适应你的需要 使用laravel echo,它为socket.io服务器提供便利,您可以使用echo在后端将事件广播到前端客户端。此外,这里还有laracast,与socket.io系统相比,这是低效的。通过创建状态机,您可以在系统真正空闲时创建额外的进程。不过,我同意socket.io将是一个更合适的解决方案事件,因为它需要一些实现工作。我完全同意我应该声明您已经回答了这个问题。我只是在评论。