Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.04.2013, 19:15
Новичок на форуме
Отправить личное сообщение для logovazzik Посмотреть профиль Найти все сообщения от logovazzik
 
Регистрация: 16.04.2013
Сообщений: 4

Проблема с AJAX
Доброго всем дня. Сразу хочу извиниться за возможную неполную информативность поста, первый раз создаю топик с зовом о помощи, ибо уже 2 второй день не могу понять, в чем собственно подводный камень. Итак, делалось что-то на подобии чата/тикет-системы, вобщем с автообновлением сообщений раз в пару секунд ( но как оказалось, что никакой интервал корректно не работает). Вроде все просто, все логично по действиям (ну по крайней мере я вижу его таким).
var time;var timer;

function ajax_post_send(text,id,status,el){
var hash=document.getElementById('send_hash').value;
clearTimeout(timer);

date=new Date(); time=(date.getTime()/1000).toFixed(); 

 
	$.ajax({
		url: "modules/support2.php?",
        type: "POST",
        data: "ticket_text="+text+"&topic_id="+id+"&is_starter=0"+"&status="+status+"&hash="+hash,
        cache: false,
        success: function(){
			 update_ticket();				
		}
	   
    });
}
   
   

function update_ticket(){


		$.ajax({
			url: "modules/ticket_system.php?ticket=<?php echo $_GET['open_ticket'];?>&update_ticket&update_time="+time,
			cache: false,
			success: function(data){
						if(data!=false){
							document.getElementById('block1').children[0].children[0].children[0].innerHTML+=data;		
							date=new Date(); time=(date.getTime()/1000).toFixed(); 
								

	
						}
					
					}
		});
		

	timer=setTimeout(function(){update_ticket();},3000); 

	}


Обрывок из ticket_system.php
if(mysql_num_rows($query=mysql_query("SELECT * FROM `admin_panel`.`tickets` WHERE `topic_id`='{$_GET['ticket']}' AND UNIX_TIMESTAMP(date)>='$time' and `is_starter`='0'"))>0){	
			
			while($row2=mysql_fetch_array($query))
					{
						include('html/ticket_inner_main.php');
			}
			} else {


Схема действия такая, что страница по дефолту обновляется каждые 3 секунды, при отправке сообщения ( ajax_send_post) происходит стоп таймера, выимка времени отправки, ее передача в php. Затем запуск опять обновления тикета, который должен сверить время и вывести согласно запросу все добавленные публикаци.Все. Вроде все логично. Все должно работать. Оно работает... но раз в 5-10 попыток отправки после отправления выдает дабл-сообщения (после обновления оно пропадает, то бишь это косяк AJAX, нежели в БД внесся лишний пост). Собственно, господа, очень нуждаюсь в Вашей подсказке, с чем может быть это связано. Повторю свое вступление, что возможно что-то неполно выложил, т.ч. что ни спросите-дополню. Спасибо заранее Вам.

Последний раз редактировалось logovazzik, 16.04.2013 в 19:18.
Ответить с цитированием
  #2 (permalink)  
Старый 16.04.2013, 23:22
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от logovazzik
но раз в 5-10 попыток отправки после отправления выдает дабл-сообщения (после обновления оно пропадает, то бишь это косяк AJAX, нежели в БД внесся лишний пост).
Типовое обычное решение отправлять месаг со UTS временем отправки - которое возвращается сервером и контролируется при приеме, при дубле приема уже полученного, с тем же временем - отсекаем, ксать дубликаты возможны и при переключении линий связи,
сервер тож отсекает дубликаты со временем отправки по идентификатору пользователя,
список времён собирать-хранить секунд 20-30
Ответить с цитированием
  #3 (permalink)  
Старый 17.04.2013, 15:36
Новичок на форуме
Отправить личное сообщение для logovazzik Посмотреть профиль Найти все сообщения от logovazzik
 
Регистрация: 16.04.2013
Сообщений: 4

Мысь понял Вашу, но в сервере проблемы нет, тем более, что спамить невозможно первой ф-ей, поэтому там (на сервере) все равно время разное. Проблема во второй функции, она почему-то вызывается иногда повторно и даже непонятно почему (для меня). До создания топика я ковырялся, ставив алерты почти на каждый этап выполнения той или иной и все было гладко со временем(все как и рассчитывалось, одно, позже другого), но в один прекрасный момент вторая ф-я ни с того, ни с сего активизировалась повторно. Вобщем сегодня переделал PHP, выдающему в формате JSON текст постов и их идентификаторы. JS должна проверять массив всех имеющихся постов на наличие аттрибута 'pid', равному ID поста и вроде бы должна отсекать при повторном включении(непонятно откуда берущемся) схожие, но не тут-то было. Опять провал. Вот код второй функции:
function update_ticket(el){

	
		$.ajax({
			url: "modules/ticket_system.php?ticket=<?php echo $_GET['open_ticket'];?>&update_ticket&update_time="+time,
			cache: false,
			success: function(data){
						if(data!=false){
								
								var result=eval('('+data+')');
								//result[0]-массив с сами постами
//result[1]-массив с идентификаторами из БД этих постов
							
							
								var posts=document.getElementsByClassName('post_td');
						
								for(i=0;i<posts.length;i++){
									for(key in result[1]){
										if (key==posts[i].getAttribute('pid')){
											result[0].splice(key,1)
										}
									}
								}
								for(i=0;i<result[0].length;i++){
									document.getElementById('block1').children[0].children[0].children[0].innerHTML+=result[0][i];	
								}	
						}
					date=new Date(); time=(date.getTime()/1000).toFixed(); 
					
					}				
		});
timer=setTimeout(function(){update_ticket();},2000);

}
Ответить с цитированием
  #4 (permalink)  
Старый 17.04.2013, 15:42
Новичок на форуме
Отправить личное сообщение для logovazzik Посмотреть профиль Найти все сообщения от logovazzik
 
Регистрация: 16.04.2013
Сообщений: 4

Сообщение от logovazzik Посмотреть сообщение
for(i=0;i<posts.length;i++){
for(key in result[1]){
if (key==posts[i].getAttribute('pid')){
result[0].splice(key,1)
}
}
}
Перечитывая пост, обнаружил ошибку , сеичас испарвлю, посмотрим, что выйдет.

Последний раз редактировалось logovazzik, 17.04.2013 в 15:45.
Ответить с цитированием
  #5 (permalink)  
Старый 17.04.2013, 15:57
Новичок на форуме
Отправить личное сообщение для logovazzik Посмотреть профиль Найти все сообщения от logovazzik
 
Регистрация: 16.04.2013
Сообщений: 4

Ура Все работает теперь как часы. Даже при диком спаме(убрав запрет на быструю публикацию). Спасибо тебе, откликнувшийся, не прошедший мимо. Тема более неактуальна и если тут есть модераторы, то ее можно закрыть.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PHP + Ajax : проблема с отправкой формы... Talker AJAX и COMET 1 04.04.2013 18:16
Проблема с AJAX Dim@ AJAX и COMET 4 16.09.2012 22:52
ajax чат проблема с записью сообщения в базу данных mysql. Niksik AJAX и COMET 4 15.01.2012 14:04
Проблема с событиями после ajax запроса Mirgorod AJAX и COMET 5 12.06.2010 18:24
Проблема с Ajax запросом в IE и Opera flash_uz AJAX и COMET 0 30.04.2009 15:08