Javascript 在不重新打开div的情况下获取消息

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

我在一个非常简单的聊天系统中工作。但我有个问题。如果关闭并重新打开chat conversation div,则只能获取其他用户消息,然后该消息会出现

我怎样才能解决这个问题?问题应该在这段代码中。由于我对ajax不太熟悉,我请求您的帮助

JS:

$(文档).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);
});