2012-05-14 2 views
1

Я разрабатываю функциональность, похожую на аукцион, используя jQuery, AJAX, PHP и mySQL.Неужели результаты AJAX не синхронизированы и вызывают несоответствие результатов опроса?

Ajax каждый раз получает доступ к серверу, чтобы получить самую последнюю ставку, и во время этого звонка мы также получаем оставшееся время с сервера, чтобы синхронизировать всех участников.

У меня есть две проблемы:

1) Время от времени времени, оставшихся мерцают возвращается к значению предыдущего времени на долю секунды. Может ли это связано с тем, что асинхронные результаты выходят из синхронизации?

Отрывки соответствующего кода:

function dotimer() { 
    updateScreen(); 
    setTimeout('dotimer()',1000); 
} 

function updateScreen(){ 
    $.ajax({ 
     type : 'POST', 
     url : 'getinfo.php', 
     dataType : 'json', 
     data: { /* various params are passed to php */ }, 
     success : function(data){ 
      /* other info processed here...*/ 
      $("#countdowntimer").html(data.secondsremaining);   
     }, 
     error : function(XMLHttpRequest, textStatus, errorThrown) {} 
    }); 
} 

getinfo.php:

$return['secondsremaining'] = strtotime($end_time)-strtotime("now"); 
/* get other infor from database... */ 
echo json_encode($return); 

(. SetTimeout и setInterval оба имели те же результаты)

2) Является ли доступ к базе данных каждый вторая чрезмерная? Я не вижу альтернативы, чтобы обеспечить актуальность информации. Есть лучший способ сделать это? Аукцион проводится в течение относительно короткого периода времени (30 минут), и мы не ожидаем более 10 участников.

Любые советы/предложения приветствуются, спасибо!

ответ

1

Я думаю, что это ваша проблема. Поскольку запросы являются асинхронными, вы не можете контролировать порядок их выполнения. Вы должны синхронизировать свои запросы и избегать нескольких запросов, т. Е. Вы можете выполнять только новый запрос, если нет ожидающих запросов, иначе вы не сможете контролировать, когда обратный вызов для каждого запроса уволен.

+0

Спасибо за ваш ответ @woozy. Как вы предлагаете это делать? Будет ли синхронизация запросов не заставлять страницу ждать завершения каждого запроса, прежде чем позволить пользователю взаимодействовать с ней? Мы не хотим, чтобы пользователь поставил ставку, когда страница взаимодействует с сервером, - они не должны знать, что это даже происходит. – FluffyKitten

+0

Синхронизация запросов не влияет на взаимодействие страниц при запуске в фоновом режиме. Я предлагаю вам попробовать запустить новый запрос по каждому обратному запросу запроса, а не запускать его каждую секунду. – woozy

+0

Извините, мне сказали, что использование SJAX будет иметь такой эффект, поэтому я даже не рассматривал синхронные запросы. Каков наилучший способ сделать это - вызовите setTimeout в функциях успешного и обратного вызова ошибок? Это также потребует изменения в логике процесса. Поскольку мы делали звонки в секунду, мы также решили вернуть серверное время. Теперь таймер больше не будет отсчитывать каждую секунду, поэтому мне понадобится отдельный таймер обратного отсчета, и вам придется синхронизировать его с временем сервера, поскольку обратный отсчет js не является точным. Крайне важно, чтобы все участники были как можно более синхронными. – FluffyKitten

Смежные вопросы