Javascript 在不重新打开div的情况下获取消息
我在一个非常简单的聊天系统中工作。但我有个问题。如果关闭并重新打开chat conversation div,则只能获取其他用户消息,然后该消息会出现 我怎样才能解决这个问题?问题应该在这段代码中。由于我对ajax不太熟悉,我请求您的帮助 JS:Javascript 在不重新打开div的情况下获取消息,javascript,Javascript,我在一个非常简单的聊天系统中工作。但我有个问题。如果关闭并重新打开chat conversation div,则只能获取其他用户消息,然后该消息会出现 我怎样才能解决这个问题?问题应该在这段代码中。由于我对ajax不太熟悉,我请求您的帮助 JS: $(文档).ready(函数(){ var snd=新音频(“图像/新消息”wav); var open=Array(); $(“#jd chat.jd-online_user”)。单击(函数(){ var user_name=$.trim($(thi
$(文档).ready(函数(){
var snd=新音频(“图像/新消息”wav);
var open=Array();
$(“#jd chat.jd-online_user”)。单击(函数(){
var user_name=$.trim($(this.text());
var id=$.trim($(this.attr(“id”));
如果($.INARAY(id,打开)!=-1)
返回
打开。推送(id);
$(“#jd chat”).prepend('\
“+用户名+”X\
\
\
');
$.ajax({
url:'chat.class.php',
类型:'POST',
数据:'get_all_msg=true&user='+id,
成功:功能(数据){
$(“#jd chat”).find(“.jd user:first.jd body”).append(“+data+”);
}
});
});
$(“#jd chat”).delegate(“.关闭此”,“单击”,函数(){
removietem=$(this).parents(.jd头文件”).attr(“id”);
$(this.parents(“.jd user”).remove();
打开=$.grep(打开,函数(值){
返回值!=removeItem;
});
});
$(“#jd chat”).delegate(“.jd头”,“单击”,函数(){
var box=$(this.parents(“.jd user,.jd online”);
$(框)。查找(“.jd body,.jd footer”).slideToggle();
});
$(“#搜索_聊天”).keyup(函数(){
var val=$.trim($(this.val());
$(“.jd online.jd body”).find(“span”).each(函数(){
if($(this.text().search)(新的RegExp(val,“i”))<0)
{
$(this.fadeOut();
}
其他的
{
$(this.show();
}
});
});
$(“#jd chat”).delegate(“.jd用户输入”,“键控”,函数(e){
如果(e.keyCode==13)
{
var$cont=$('.jd body');
var box=$(this.parents(“.jd user”);
var msg=$(box.find(“input”).val();
var to=$.trim($(框).find(“.jd头”).attr(“id”);
$.ajax({
url:'chat.class.php',
类型:'POST',
数据:'send=true&to='+to+'&msg='+msg,
成功:函数(数据){
$('#textraeabox').val('');
$(框)。查找(“.jd body”)。追加(“+msg+”);
$cont[0]。scrollTop=$cont[0]。scrollHeight;
$cont.append(“”+$(this.val()+“”);
$cont[0]。scrollTop=$cont[0]。scrollHeight;
$(this.val(“”);
}
});
}
});
函数消息_cycle()
{
$.ajax({
url:'chat.class.php',
类型:'POST',
数据:'unread=true',
数据类型:'JSON',
成功:函数(数据){
$。每个(数据、功能(索引、obj){
var用户=指数;
var-box=$(“.jd-chat”).find(“div-2”).parents(.jd-user”);
$(“.jd online”).find(“.light”).hide();
$。每个(对象、功能(键、值){
if($.inArray(用户,打开)!=-1)
$(框)。查找(“.jd body”)。追加(“+value+”);
其他的
snd.play();
$(.jd online”).find(“span#“+user+”.light”).show();
});
});
}
});
}
设置间隔(信息周期,1000);
});
当您第一次打开chat conv div时,消息是如何显示的
我假设message_cycle()应该每秒在您的div中显示新消息,我想您的问题就在这里
我真的不太明白这一点:
var-box=$(“.jd-chat”).find(“div-2”).parents(.jd-user”)代码>
div的id不能以数字开头,您需要
而不是
在您的行之后添加一个console.log('Box found:'+Box.length)代码>只是为了确保在信息循环中正确找到您的方框。谢谢您的回答。我做了这些改变,但仍然是相同的,这就是问题所在。div ID必须是用户ID。我在调试模式下进行了测试,如果用户头ID为=“2”,那么我会得到消息。你怎么能这么做?像这样var-box=$(“#jd-chat”).find(“div”+id+”).parents(“.jd-user”)代码>抱歉,我不明白你的问题:var-box=$(“.jd-chat”).find(“div”+id+”).parents(.jd-user”)代码>在我看来是正确的:你是在问如何检索id吗?这不是var=user?
是的,我修复了那个div id。现在div id=user id在我看来也是正确的。但问题是一样的。
$(document).ready(function(){
var snd = new Audio("images/new_msg.wav");
var open=Array();
$("#jd-chat .jd-online_user").click(function(){
var user_name = $.trim($(this).text());
var id = $.trim($(this).attr("id"));
if($.inArray(id,open) !== -1 )
return
open.push(id);
$("#jd-chat").prepend('<div class="jd-user">\
<div class="jd-header" id="' + id + '">' + user_name + '<span class="close-this"> X </span></div>\
<div class="jd-body"></div>\
<div class="jd-footer"><input id="textareabox" placeholder="escrever..."></div>\
</div>');
$.ajax({
url:'chat.class.php',
type:'POST',
data:'get_all_msg=true&user=' + id ,
success:function(data){
$("#jd-chat").find(".jd-user:first .jd-body").append("<span style='display:block' class='me'> " + data + "</span>");
}
});
});
$("#jd-chat").delegate(".close-this","click",function(){
removeItem = $(this).parents(".jd-header").attr("id");
$(this).parents(".jd-user").remove();
open = $.grep(open, function(value) {
return value != removeItem;
});
});
$("#jd-chat").delegate(".jd-header","click",function(){
var box=$(this).parents(".jd-user,.jd-online");
$(box).find(".jd-body,.jd-footer").slideToggle();
});
$("#search_chat").keyup(function(){
var val = $.trim($(this).val());
$(".jd-online .jd-body").find("span").each(function(){
if ($(this).text().search(new RegExp(val, "i")) < 0 )
{
$(this).fadeOut();
}
else
{
$(this).show();
}
});
});
$("#jd-chat").delegate(".jd-user input","keyup",function(e){
if(e.keyCode == 13 )
{
var $cont = $('.jd-body');
var box=$(this).parents(".jd-user");
var msg=$(box).find("input").val();
var to = $.trim($(box).find(".jd-header").attr("id"));
$.ajax({
url:'chat.class.php',
type:'POST',
data:'send=true&to=' + to + '&msg=' + msg,
success:function(data){
$('#textareabox').val('');
$(box).find(".jd-body").append("<span style='display:block' class='me'> " + msg + "</span>");
$cont[0].scrollTop = $cont[0].scrollHeight;
$cont.append('<span>' + $(this).val() + '</span>');
$cont[0].scrollTop = $cont[0].scrollHeight;
$(this).val('');
}
});
}
});
function message_cycle()
{
$.ajax({
url:'chat.class.php',
type:'POST',
data:'unread=true',
dataType:'JSON',
success:function(data){
$.each(data , function( index, obj ) {
var user = index;
var box = $("#jd-chat").find("div#2").parents(".jd-user");
$(".jd-online").find(".light").hide();
$.each(obj, function( key, value ) {
if($.inArray(user,open) !== -1 )
$(box).find(".jd-body").append("<span style='display:block' class='other'> " + value + "</span>");
else
snd.play();
$(".jd-online").find("span#" + user + " .light").show();
});
});
}
});
}
setInterval(message_cycle,1000);
});