#php #jquery #ajax
Вопрос:
У меня есть страница с каталогом товаров на аукционе. У каждого есть кнопка для размещения ставок, которая имеет тайм-аут в 2 секунды, чтобы проверить, была ли размещена новая ставка. Существует также другой скрипт, который проверяет, достигнута ли минимальная сумма для этого товара. У этого есть тайм-аут в 3 секунды.
У меня был таймер на странице, отсчитывающий время до закрытия аукциона, который срабатывал каждую секунду, но это привело к блокировке ресурсов браузера, и все запаздывало. В итоге я вызвал этот таймер извне, а javascript выполнял фактический обратный отсчет. Это полностью освободило ресурсы браузера.
Проблема, с которой я сталкиваюсь, заключается в том, что если люди активно участвуют в торгах в последнюю минуту, им необходимо распознать, что идет война ставок, и добавить две минуты к таймеру. У меня есть PHP-код для этого, и он отлично работал, когда таймеры запускались на странице каждую секунду, но теперь ajax вызывает таймер один раз, поэтому две минуты не будут добавлены. Ниже приведен код для одного второго ajax, а во-вторых, то, что у меня есть сейчас.
Вопрос в том, как я могу получить второй вариант обновления страницы php независимо от главной страницы? Я понимаю, что мне, вероятно, нужно, чтобы он работал, как раньше, но это снова загружает браузер.
//ORIGINAL OPTION
$(document).ready(function() {
$(function worker(){
// don't cache ajax or content won't be fresh
$.ajaxSetup ({
cache: false,
complete: function() {
// Schedule the next request when the current one's complete
setTimeout(worker, 1000);
}
});
// load() functions
var loadUrl = "/lot-timer.php?lot_id=<?php echo $rsprod['lot_id']; ?>amp;auction_id=<?php echo $row['auction_id']; ?>amp;eye=<?php echo $i; ?>";
$("#lot-timer<?php echo $rsprod['lot_id']; ?>").load(loadUrl);
// end
});
});
//SECOND OPTION
$(document).ready(function() {
$.ajax({
type: 'POST',
data:$(this).serialize(),
dataType: 'html',
url: "/lot-timer.php?lot_id=<?php echo $rsprod['lot_id']; ?>amp;auction_id=<?php echo $row['auction_id']; ?>amp;eye=<?php echo $i; ?>",
success: function (d) {//begin success
//add the pending message to a div on the page
$("#lot-timer<?php echo $rsprod['lot_id']; ?>").html(d);
}//end success
});
});
Комментарии:
1. Это похоже на работу для websockets, а не для AJAX
2. @ADyson знаете ли вы хорошую реализацию websockets в PHP?
3. Честно говоря, PHP не очень хорошо подходит для запуска сервера websocket, потому что он не очень хорош в асинхронности или используется как длительный процесс. Если бы это был я, я бы использовал NodeJS или ASP.NET Ядро для бэкэнда такого сайта, как этот, но я понимаю, что вы, возможно, слишком далеко продвинулись для этого. Наиболее полной реализацией сервера websocket для PHP, о которой я знаю, является Ratchet, но в любом случае вы найдете это в поиске Google через несколько секунд.
4. Спасибо за ответы. Я тоже слишком далеко продвинулся по дороге для Рэтчета. У меня нет времени изучать, как это работает. Есть ли что-нибудь с Javascript / jQuery, что я могу попробовать?
5. Может быть, кто-нибудь подскажет мне, как использовать websockets для вызова таймера и его обновления каждую секунду?