У меня проблемы с системой чата ajaxPoll. Я пытаюсь отправить последний идентификатор сообщения чата div
обратно в php
, поэтому запрос может отображать только результаты, которые выше, чем последний отправленный идентификатор.
Все сообщения чата находятся в папке div
под названием chat_log
. Сообщение будет иметь div
вокруг него с классом идентификатора сообщения. В нем будет текст message
, а затем идентификатор этого сообщения, например: 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);
});
Код берет строку «сообщение», затем получает номер. Код:
lastDiv = lastDiv = $('#chat_log').find('div:last-child');
lastId = lastDiv[0].className.substring(7);
console.log(lastId);
...работает правильно при вставке в консоль и выводит правильное, последнее сообщение div
id
.
Однако этого не происходит, когда он запускается не вручную (вероятно, потому, что он не находится в функции или в цикле или что-то еще), код по какой-то причине отправляет только «0
», когда есть другие сообщения с id
из 1000
+. Я также пробовал много других вещей, таких как setInterval
и т. д. Я думаю, что одна вещь может быть причиной проблемы - это область видимости переменной, как будто когда вызывается успех function
опроса, он не будет корректировать переменную lastId
. Хотя я не совсем уверен, так ли это. Если это так, я был бы признателен за поддержку в том, как исправить область действия переменной, чтобы код работал правильно.
Кроме того, php работает успешно, поэтому мне не нужна помощь.
Важное изменение (упростите понимание проблемы): код
lastDiv = lastDiv = $('#chat_log').find('div:last-child');
lastId = lastDiv[0].className.substring(7);
... работает нормально, проблема в окружающей области (структуре). Также where
не имеет отношения к этому where
, просто сообщает php, откуда был отправлен скрипт. Я знаю, что к первому добавлен div с именем test
, который определяет первый lastId
как 0
. Цикл должен обрабатывать получение последних lastId
, но это не так.
Что я обнаружил: lastId
не редактируется в ajaxPoll, он получает правильный lastId из div, но не редактирует lastId
. Что делает ПОЧТИ определенным, что это проблема масштаба
where: where
? Вы сделали какую-то ошибку там. - person Levi Morrison   schedule 20.09.2012message0
, теперь ваш последний div возвращает0
. - person undefined   schedule 20.09.2012lastDiv = lastDiv = $('#chat_log').find('div:last-child'); lastId = lastDiv[0].className.substring(7);
. undefined вы не читали, когда есть другие сообщения с идентификатором 1000+. ? - person Jordan Richards   schedule 20.09.2012$('#chat_log > div:last-child').prop('class')
? - person JKirchartz   schedule 20.09.2012