Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在ajax轮询中发送div的最后一个类?_Javascript_Jquery_Ajax Polling - Fatal编程技术网

Javascript 如何在ajax轮询中发送div的最后一个类?

Javascript 如何在ajax轮询中发送div的最后一个类?,javascript,jquery,ajax-polling,Javascript,Jquery,Ajax Polling,我的ajaxPoll聊天系统有问题。我正在尝试将聊天消息的div的最后一个Id发送回php,因此查询只能显示高于上次发送的Id的结果 所有聊天信息都位于名为chat\u log的div中。消息周围将有一个带有消息id类的div。它将有文本message,然后是该消息的id,例如:class=“message543”。好的,为了让大家更容易理解,这里有一个HTML示例,它的结构和顺序都是正确的 <div id='chat_log'> <div class='message

我的ajaxPoll聊天系统有问题。我正在尝试将聊天消息的
div
的最后一个Id发送回
php
,因此查询只能显示高于上次发送的Id的结果

所有聊天信息都位于名为
chat\u log
div
中。消息周围将有一个带有消息id类的
div
。它将有文本
message
,然后是该消息的id,例如:
class=“message543”
。好的,为了让大家更容易理解,这里有一个HTML示例,它的结构和顺序都是正确的

<div id='chat_log'>
    <div class='message435'></div>
    <div class='message436'></div>
    <div class='message437'></div>
    <div class='message438'></div>
    <div class='message439'></div>
    <div class='message440'></div>
    <div class='message441'></div>
</div>
…粘贴到控制台时工作正常,并输出正确的最后一个
div
消息
id

但是,当非手动运行时(可能是因为它不在函数或循环中,或者其他什么原因),当存在id为
1000
+的其他消息时,代码只发送“
0
”。我还尝试了许多其他方法,比如
setInterval
,等等。我认为可能是变量范围引起了问题,好像在调用轮询的success
函数时,它不会调整
lastId
变量。不过,我不完全确定情况是否如此。如果是这样的话,我将感谢您对如何修复变量范围以使代码正常工作的支持

另一方面,php正在成功运行,因此我不需要任何帮助

重要编辑(使问题更容易理解):代码

lastDiv = lastDiv = $('#chat_log').find('div:last-child');
lastId = lastDiv[0].className.substring(7);
…很好,它的周围区域(结构)似乎是问题所在。另外,
where
与此
where
无关,它只告诉php脚本从何处发送。我知道在first上附加了一个名为
test
的div,它将第一个
lastId
定义为
0
循环应处理获取最新的
lastId
,但它不处理

我的发现
lastId
未在ajaxPoll中编辑,它从div中获取正确的lastId,但不编辑
lastId
。这几乎可以确定这是一个范围问题,一个问题是ajaxPoll。您创建要发送一次的数据,并且不会在每次轮询时重新评估该数据

另一个问题是
lastId
对于
ajaxGo
函数是本地的。把它搬到外面去

下面是一个使用
jQuery.ajax
setInterval

var lastId = 0;

function ajaxGo() {

    $.ajax({
        url: "/echo/html/",
        type: "POST",
        data: {
            'last': lastId,
            html: '<div class="message' + (parseInt(lastId) + 1) + '">' + (parseInt(lastId) + 1) + '</div>'
        },
        dataType: "html",

        success: function(result) {

            if (result) {
                $(result).appendTo('#chat_log').show();
                lastDiv = $('#chat_log').find('div:last-child');
                lastId = lastDiv[0].className.substring(7);
                console.log(lastId);

/*                if (!hasFocus && !titleCurrentlyChanging) {
                    changeTitle();
                }

                soundHandle = document.getElementById('soundHandle');
                soundHandle.src = '../Sounds/Message.wav';
                soundHandle.play();*/
            }
        }

    });
}

var timer = setInterval(ajaxGo, 1000);​
var lastId=0;
函数ajaxGo(){
$.ajax({
url:“/echo/html/”,
类型:“POST”,
数据:{
“last”:lastId,
html:“”+(parseInt(lastId)+1)+“”
},
数据类型:“html”,
成功:功能(结果){
如果(结果){
$(结果).appendTo(“#聊天记录”).show();
lastDiv=$(“#聊天记录”).find('div:last child');
lastId=lastDiv[0].className.substring(7);
console.log(lastId);
/*如果(!hasFocus&&!标题当前更改){
changeTitle();
}
soundHandle=document.getElementById('soundHandle');
soundHandle.src='../Sounds/Message.wav';
声音手柄。播放()*/
}
}
});
}
var定时器=设置间隔(ajaxGo,1000);​

一些与您的问题不相关的代码被注释掉或省略。

如果是范围问题,可能会通过放置

var lastId = -1;

在代码顶部,然后将
var lastId=…
替换为
lastId=…

这是什么
其中:where
?您在那里犯了某种错误。在DOMReady上,您正在添加一个div,该div的类为
message0
,现在您的最后一个div返回
0
。使用分隔符来获取值更容易:“message\u 0”,然后使用split(“\u0”)。问题与
lastDiv=lastDiv=$(“#chat\u log”)无关。查找('div:last child');lastId=lastDiv[0].className.substring(7)。未定义你没有读过“当有其他id为1000+的消息时”吗?@LeviMorrison这与这种情况无关,它只是告诉php它是从哪里发送的。回答很好,正是我想要的:)谢谢!
var lastId = 0;

function ajaxGo() {

    $.ajax({
        url: "/echo/html/",
        type: "POST",
        data: {
            'last': lastId,
            html: '<div class="message' + (parseInt(lastId) + 1) + '">' + (parseInt(lastId) + 1) + '</div>'
        },
        dataType: "html",

        success: function(result) {

            if (result) {
                $(result).appendTo('#chat_log').show();
                lastDiv = $('#chat_log').find('div:last-child');
                lastId = lastDiv[0].className.substring(7);
                console.log(lastId);

/*                if (!hasFocus && !titleCurrentlyChanging) {
                    changeTitle();
                }

                soundHandle = document.getElementById('soundHandle');
                soundHandle.src = '../Sounds/Message.wav';
                soundHandle.play();*/
            }
        }

    });
}

var timer = setInterval(ajaxGo, 1000);​
var lastId = -1;