Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Создание оповещалки через php и возможно ajax
 
 автор: MikeSVB   (21.05.2009 в 04:11)   письмо автору
 
 

пишу систему писем (сообщений) или мини чатов для сайта.

Как мне организовать такую "фишку" пользователь находится на странице диалога, и ждёт ответа, но может сидеть и на дургих страницах. так вот, чтобы хоть както напомнить что он сидит в чате и что ему пришло новое сообщение, хотелось бы выводить звук "пииии" :) Есть ли у кого примеры данного.?
Вроде есть в чатах, но рыться и разбираться долго.

Получается я хочу так: аякс обращается к сприпту с запросом от пользователя (от меня) "нет ли мне новых сообщений?" скрипт даёт ответ. Если ответ положительный то запустить звук и на экране вывести типа алерт что "Вам пришло новое сообщение".

Подскажите от чего отталкиваться если нет примерного варианта

  Ответить  
 
 автор: Пятачок   (22.05.2009 в 13:34)   письмо автору
 
   для: MikeSVB   (21.05.2009 в 04:11)
 

в скрытом фрейме (фрейм имеет ширину 0) check.php - проверка на новое сообщение каждые NN сек (обновляется форма)


<html>
<head>
<META HTTP-EQUIV='Refresh' Content=NN; URL=check.php?sid=<?=$sid?>'></head>
<body>
<?php
...
проверка на новое сообщение
...
если естьто:
echo 
"<script>";
echo 
"<EMBED SRC='1.wav'></EMBED>"
echo 
"</script>";
?>
</body>
</html>

  Ответить  
 
 автор: VITtek   (22.05.2009 в 15:59)   письмо автору
 
   для: MikeSVB   (21.05.2009 в 04:11)
 

файл index.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Untitled Document</title>
<script type="text/javascript" src="ajax.js"></script>
</head>

<body onload='process()'>
<div id="myDivElement"></div>
</body>
</html>


файл live_pk.php:
<?php 
header
('Content-Type: text/xml');
// 1 - если нужен звонок; 0- если звонок не нужен
print_r ('<?xml version="1.0" encoding="utf-8"?><r><tist>1</tist></r>');
?>


файл ajax.js:
// Переменная для хранения ссылки на объект XmlHttpRequest
var xmlHttp1 = createXmlHttpRequestObject1();
// создать экземпляр объекта XMLHttpRequest
function createXmlHttpRequestObject1() 
{
  // Переменная для хранения ссылки XMLHttpRequest
  var xmlHttp1;
  // Эта часть кодо должна работать во всех браузерах, кроме IE6 и более старых версиях
  try
  {
    // попытаться создать объект XMLHttpRequest
    xmlHttp1 = new XMLHttpRequest();
  }
  catch(e)
  {
    // предпологаеться использование IE6 и более старой версии
    var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
                                    'MSXML2.XMLHTTP.5.0',
                                    'MSXML2.XMLHTTP.4.0',
                                    'MSXML2.XMLHTTP.3.0',
                                    'MSXML2.XMLHTTP',
                                    'Microsoft.XMLHTTP');
    // попробовать все возможные prog id, пока какая ни будь попытка не увенчаеться успехом
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) 
    {
      try 
      { 
        // попытаться создать объект XMLHttpRequest
        xmlHttp1 = new ActiveXObject(XmlHttpVersions[i]);
      } 
      catch (e) {}
    }
  }
  // Вернуть созданный объект или вывести сообщение об ошибке
  if (!xmlHttp1)
    alert("Ошибка создания объекта XMLHttpRequest.");
  else 
    return xmlHttp1;
}

// вызываеться для чнения с сервера
function process()
{
  // продолжать если xmlHttp не пустая сылка
  if (xmlHttp1)
  {
    // попытаться соедениться с сервером
    try
    {
      // инициировать чтение файла с сервера ...Date.parse(new Date()), true)-защита от кеширования
      xmlHttp1.open("GET", "live_pk.php?" + Date.parse(new Date()), true);
      xmlHttp1.onreadystatechange = handleRequestStateChange1;
      xmlHttp1.send(null);
    }

    // вывести сообщение об ошибке в случаи не удачи
    catch (e)
    {
      alert("Не возможно соедениться с сервером:\n" + e.toString());
    }
  }
}

function handleRequestStateChange1() 
{
  // Если readyState=4, мы можем прочитать ответ с сервера
  if (xmlHttp1.readyState == 4) 
  {
    // продолжать если получен статус 200 ок
    if (xmlHttp1.status == 200) 
    {
      try
      {
    // обработать ответ полученный с сервера
    handleServerResponse1();
      }
      catch(e)
      {
        window.setTimeout(function() {top.location.reload(); return true;}, 30000);
      }
    } 

    else
    {
        window.setTimeout(function() {top.location.reload(); return true;}, 30000);
    }
  }
}

// Обработать ответ, полученный с сервера
function handleServerResponse1()
{
  // прочитать ответ, полученный с сервера
  var xmlResponse1 = xmlHttp1.responseXML;
  // получить ссылку на корневой элемент XML's
  xmlRoot1 = xmlResponse1.documentElement;  
  // получить ссылки на массивы с названием и tist 
  tistArray = xmlRoot1.getElementsByTagName("tist");
  // сгенерировать HTML-код
  var html = "";  
  // создать HTML-структуру
  
  for (var i=0; i<tistArray.length; i++)
  {
    html = tistArray.item(i).firstChild.data;
  
  if (html==1)
  {
  //звонок
  var rqsound = "<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0' WIDTH='1' HEIGHT='1'><param name='movie' value='sound/s1.swf'><param name='quality' value='high'><param name='wmode' value='transparent'><embed src='sound/s1.swf' quality='high' pluginspage='http://www.macromedia.com/go/getflashplayer' type='application/x-shockwave-flash' width='1' height='1'></embed></object>";

  // получить ссылку на элемент <div>
  myDiv = document.getElementById("myDivElement");
  // вывести полученный HTML-код
  myDiv.innerHTML = html;      
  alert("Вам пришло новое сообщение");
  }
  else
  {
    //повторить всё заново через минуту
    setTimeout('process()', 60000);
  }
  }
}

  Ответить  
 
 автор: MikeSVB   (23.05.2009 в 02:45)   письмо автору
 
   для: VITtek   (22.05.2009 в 15:59)
 

ещё не пробовал, но спасибо. позже отпишусь

  Ответить  
 
 автор: MikeSVB   (28.05.2009 в 07:10)   письмо автору
 
   для: MikeSVB   (23.05.2009 в 02:45)
 

огромное спасибо! всё работает! звук правда ещё не проверял.

  Ответить  
 
 автор: VITtek   (28.05.2009 в 08:23)   письмо автору
 
   для: MikeSVB   (28.05.2009 в 07:10)
 

у меня там маленькая ошибочка
вместо:
myDiv.innerHTML = html;       

надо:
myDiv.innerHTML = rqsound;       

  Ответить  
 
 автор: MikeSVB   (04.06.2009 в 03:11)   письмо автору
 
   для: VITtek   (28.05.2009 в 08:23)
 

спасибо! учту

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования