И сразу прошу о помощи. Хочу сделать чат, и по ходу столкнулся с такой проблемой –
Нужно сделать что бы окно с сообщениями не моргало т.е. не обновлялось как таковое.Проблему решил устранить с помощью дополнительного фрейма нулевого размера, который собственно и будет обновляться, а данные из него будут с помощью Ява скрипта передаваться в окно сообщений. Если реализовывать это вот так
Оно будет передаваться при каждом обновлении, то есть сообщение будет просто дублироваться. Как можно проверить член массива mess[21] и сравнить его с тем, что уже отправлен в фрейм? И еще как можно поместить сообщение в слой находящийся в фрейме?
Естественно будут передаваться все члены массива, поэтому проверку необходимо делать всех членов и если есть разница, добавлять новые и удалять такое же количество старых записей в фрейме сообщений.
Надеюсь, вопрос понятен и вы мне поможете!
И еще скорее всего фрейм сообщений (не скрытый фрейм) при загрузке уже будет содержать 22 члена массива, состоящих из последних сообщений, и уже потом будет обновляться из невидимого фрейма…
Какие идеи?
Нужно сделать что бы окно с сообщениями не моргало т.е. не обновлялось как таковое.Проблему решил устранить с помощью дополнительного фрейма нулевого размера, который собственно и будет обновляться, а данные из него будут с помощью Ява скрипта передаваться в окно сообщений. Если реализовывать это вот так
Code:
<script LANGUAGE="JavaScript">
<!--
function update(){
document.location.href="chat_load.asp"
}
setTimeout("update()",<%=Session("RefreshRate")%>);
//-->
</SCRIPT>
//здесь RefreshRate – передается из формы и есть время задержки обновления (с этим нет проблем) Обновляю страницу chat_load.asp
……….
Здесь скрипт для добавления сообщения в базу (для чата использую Ms Access)
С этим тоже нет проблем, и этого вам лучше не видеть, к делу это не относиться.
………..
А вот теперь делаю выборку последних 22 членов из базы и создаю из них массив mess
<%
sql1 = "SELECT TOP 1 ID_M FROM MSG order by ID_M DESC "
set rs1 = chat.Execute(sql1)
max_chat=rs1("ID_M")
min_chat=max_chat-22 %>
Этим определил максимальное и минимальное ID сообщений…
<%
sql = "SELECT MSG, ID_M, USER_ID, DATA_M FROM MSG where ID_M>"& min_chat&" order by ID_M"
set rs = chat.Execute(sql)
%>
сделал выборку из базы всех значений больше минимального…
Надеюсь, идея ясна, теперь самое непонятное –
Создаю массив из 22 членов-
<script LANGUAGE="JavaScript">
<!--
var mess= new Array(21)
<%
n=0
Do while NOT (rs.EOF or rs.EOF)
%>
заполняю массив значениями (это как раз все сообщения ID которых больше минимального -
mess[<%=n%>]="- <strong><%=rs("USER_ID")%></strong>(<i class=data><% =rs("DATA_M")%></i>):<%=rs("MSG")%><br>"
<%
rs.MoveNext
n=n+1
Loop %>
А вот теперь для примера передам последний член массива в фрейм chat -
top.chat.document.write(mess[21])
сообщение естественно передалось, но!
//-->
</SCRIPT>
Оно будет передаваться при каждом обновлении, то есть сообщение будет просто дублироваться. Как можно проверить член массива mess[21] и сравнить его с тем, что уже отправлен в фрейм? И еще как можно поместить сообщение в слой находящийся в фрейме?
Естественно будут передаваться все члены массива, поэтому проверку необходимо делать всех членов и если есть разница, добавлять новые и удалять такое же количество старых записей в фрейме сообщений.
Надеюсь, вопрос понятен и вы мне поможете!
И еще скорее всего фрейм сообщений (не скрытый фрейм) при загрузке уже будет содержать 22 члена массива, состоящих из последних сообщений, и уже потом будет обновляться из невидимого фрейма…
Какие идеи?