Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Обновление чата, используя JSON

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
tjomamokrenko
Отправлено: 12 Октября, 2014 - 16:25:50
Post Id



Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Окт. 2014  
Откуда: Кишинёв, Молдова


Помог: 0 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1.                 function chatUpdate() {
  2.                         var xmlhttp = new XMLHttpRequest();
  3.                         var url = document.URL + '&action=update';
  4.  
  5.                         xmlhttp.onreadystatechange = function() {
  6.                                 if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
  7.                                                 var myArr = JSON.parse(xmlhttp.responseText);
  8.                                                 alert(myArr);
  9.                                 }
  10.                         }
  11.                        
  12.                         xmlhttp.open("GET", url, true);
  13.                         xmlhttp.send();
  14.                 }
  15.  
  16.                 setInterval(chatUpdate(), 1000);


Alert возвращает всё верно, но только 1 раз. Проблема в методе onreadystatechange и/или в свойстве readyState. Т.е. они не обновляются после первого запроса. Как только ни пытался – не могу реорганизовать этот код так, чтобы эти состояния обновлялись. Помогите Плач
 
 Top
3d_killer
Отправлено: 12 Октября, 2014 - 16:32:20
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




вот у меня опрос сервера по аналогии сделай, запускаешь один раз функцию и поехало..
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. //Запуск таймера
  3. function f_timer()
  4.         {
  5.           timer1 = setTimeout(function() {$('#connect_server').html("Сервер не доступен!").css('color','#F00');}, 10000);
  6.           $.ajax({
  7.                 async:true,
  8.                 type: "POST",
  9.                 dataType: 'HTML',
  10.                 url: core_url,
  11.                 data: {action:'post_ping',type_data:'eval'},
  12.                 success: function(data)
  13.                         {      
  14.                                 var obj=f_check_error(data);
  15.                                 if(obj!==false)
  16.                                         {      
  17.                                                 if (obj.data['error']=='')
  18.                                                 {
  19.                                                         clearTimeout(timer1);
  20.                                                         $('#connect_server').html('Сервер доступен:'+ obj.data['time']).css('color','#0F0');
  21.                                                 }
  22.                                         else
  23.                                                 {
  24.                                                         f_data_info(obj.data['error']);
  25.                                                         if(obj.data['logout']==1){setTimeout(function() {window.location = "/admin/";}, 10000);}
  26.                                                 }}},
  27.                 error:function(){$('#connect_server').html("Сервер не доступен!").css('color','#F00');},
  28.                 complete:function(){setTimeout(function(){f_timer();}, 10000);}});
  29.         }
  30.  

(Добавление)
у тебя через этот интервал запустится один раз и все, внутри функции опять таймер нужен на запуск этой функии
 
My status
 Top
tjomamokrenko
Отправлено: 12 Октября, 2014 - 17:19:15
Post Id



Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Окт. 2014  
Откуда: Кишинёв, Молдова


Помог: 0 раз(а)




3d_killer пишет:
у тебя через этот интервал запустится один раз и все

setInterval() вызывает функцию/выполняет выражение пока не будет вызвана clearInterval()
http://www[dot]w3schools[dot]com/jsref/m[dot][dot][dot]_setinterval[dot]asp

P.S. Не хотелось бы использовать jQuery/AJAX.

Ума не приложу, почему не работает:
CODE (javascript):
скопировать код в буфер обмена
  1. function chatUpdate() {
  2.         var xmlhttp = new XMLHttpRequest();
  3.         var url = document.URL + '&action=update';
  4.  
  5.         xmlhttp.onreadystatechange = function() {
  6.                 if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
  7.                                 var myArr = JSON.parse(xmlhttp.responseText);
  8.                                 alert(myArr);
  9.                 }
  10.         }
  11.        
  12.         xmlhttp.open("GET", url, true);
  13.         xmlhttp.send();
  14. }
  15.  
  16. setInterval(chatUpdate(), 1000);
 
 Top
3d_killer
Отправлено: 12 Октября, 2014 - 17:34:33
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




tjomamokrenko пишет:
setInterval() вызывает функцию/выполняет выражение пока не будет вызвана clearInterval()

ну да только один раз пока идет отсчет ты можешь ее вызвать, она не дает цикла понимаешь не?
(Добавление)
CODE (javascript):
скопировать код в буфер обмена
  1.     function chatUpdate() {
  2.             var xmlhttp = new XMLHttpRequest();
  3.             var url = document.URL + '&action=update';
  4.      
  5.             xmlhttp.onreadystatechange = function() {
  6.                     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
  7.                                     var myArr = JSON.parse(xmlhttp.responseText);
  8.                                     alert(myArr);
  9.                     }
  10.             }
  11.            
  12.             xmlhttp.open("GET", url, true);
  13.             xmlhttp.send();
  14. setInterval(chatUpdate(), 1000);
  15.     }
  16.       chatUpdate();



так сделай

(Отредактировано автором: 12 Октября, 2014 - 17:36:21)

 
My status
 Top
tjomamokrenko
Отправлено: 12 Октября, 2014 - 17:41:34
Post Id



Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Окт. 2014  
Откуда: Кишинёв, Молдова


Помог: 0 раз(а)




3d_killer пишет:
понимаешь не

Если честно – не понял

Проблема была в двух символах http://stackoverflow[dot]com/questio[dot][dot][dot]6326049#26326049
 
 Top
esterio
Отправлено: 13 Октября, 2014 - 00:08:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




tjomamokrenko пишет:
P.S. Не хотелось бы использовать jQuery/AJAX.

tjomamokrenko пишет:
var xmlhttp = new XMLHttpRequest();

разве ето не AJAX?
вам нужно вместо интервала таймаут использовать реурсивно после ajax запросса
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB