我的 ajaxPoll 聊天系统有问题。我正在尝试将聊天消息的最后一个 ID 发送div
回php
,因此查询只能显示高于发送的最后一个 id 的结果。
所有聊天消息都在一个div
被调用的chat_log
. div
一条消息周围会有一个带有消息id 的类。它将具有文本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 max 中有 7 条消息。任何高于此的消息都将被清除(如果一切正常,只需一点额外信息。)另外需要注意的是,我使用了jquery库和一个 jquery 插件在这里找到,归功于这篇博文。(可以在此处找到有关插件功能的信息。)
我试过的:
function ajaxGo() {
$.ajaxPollSettings.pollingType = "interval";
$.ajaxPollSettings.interval = 700;
$.ajaxPollSettings.maxInterval = 1000;
$.ajaxPollSettings.durationUntilMaxInterval = 2000;
var httpcount = 1;
var lastDiv = lastDiv = $('#chat_log').find('div:last-child');
var lastId = lastDiv[0].className.substring(7);
$.ajaxPoll({
url: "place_chat/update.php",
type: "POST",
data: {
where: where,
'last': lastId
},
dataType: "html",
cache: false,
successCondition: function (result) {
var responseString = result;
if (result != '') {
$(result).appendTo('#chat_log').show();
lastDiv = lastDiv = $('#chat_log').find('div:last-child');
lastId = lastDiv[0].className.substring(7);
console.log(lastId);
httpcount = httpcount + 1;
if (!hasFocus && !titleCurrentlyChanging) {
changeTitle();
}
soundHandle = document.getElementById('soundHandle');
soundHandle.src = '../Sounds/Message.wav';
soundHandle.play();
}
}
});
}
$(document).ready(function () {
$('#chat_log').append('<div class="message0">Test</div>');
setTimeout(ajaxGo, 500);
});
代码去掉字符串'message',然后获取数字。编码:
lastDiv = lastDiv = $('#chat_log').find('div:last-child');
lastId = lastDiv[0].className.substring(7);
console.log(lastId);
...粘贴到控制台时可以正常工作并输出正确的 last div
's message id
。
但是,当非手动运行时(可能是因为它不在函数或循环中或其他什么情况下)它不会,由于某种原因,代码仅0
在有其他带有+id
的消息时发送“” 1000
。我还尝试了很多其他的东西,比如setInterval
's,等等。我认为可能导致问题的一件事是变量范围,就好像当function
调用成功的民意调查时,它不会调整lastId
变量。我不完全确定是否是这种情况。如果是这种情况,我将不胜感激有关如何修复变量范围以使代码正常工作的支持。
附带说明一下,php 运行成功,所以我不需要帮助。
重要编辑(使问题更容易理解):代码
lastDiv = lastDiv = $('#chat_log').find('div:last-child');
lastId = lastDiv[0].className.substring(7);
...工作正常,它的周边区域(结构)似乎是问题所在。也where
与此无关,where
只是告诉 php 脚本是从哪里发送的。我知道在 first called 上附加了一个 div test
,即将第一个定义lastId
为0
. Loop应该处理获取最新的,lastId
但它没有。
我发现:
lastId
没有在 ajaxPoll 中编辑,它从 div 获取正确的 lastId,但没有编辑lastId
。这几乎可以确定这是一个范围问题