Использование setInterval и AJAX для обнаружения изменений на стороне сервера - PullRequest
0 голосов
/ 11 июня 2018

У меня есть переменная "cart" на стороне сервера, которая обновляется посредством вызова AJAX при нажатии кнопки (я использую Shopify, если это имеет значение, но я чувствую, что это общий вопрос).Я использую AJAX для перезагрузки div после изменения корзины.Проблема, с которой я столкнулся, заключалась в следующем:

  1. Я отправляю вызов AJAX «корзины обновлений»
  2. Сразу после попытки перезагрузить div
  3. В зависимости от точного временивозможно, 1 из каждых 10 раз при перезагрузке использовались бы старые данные корзины, поскольку изменение корзины еще не было зарегистрировано на сервере.

Я нашел решение использовать setInterval, но я думаю, что есть некоторые серьезные проблемы с этим методом.Сначала я покажу код, а затем поделюсь своими опасениями.

function addToCart(prodid,prodHandle,sizeString){
  var oldSpaces = getNumSpaces(); //gets the number of "free spaces" to display

  //the actual call to update the cart
  push_to_queue(prodid, 1, {}, Shopify.moveAlong);

 //now wait for the number of items to change (ignore the possibility of cart update 
//failure, that's handled elsewhere)
  var timerVar = setInterval(function(){   
    var newSpaces = getNumSpaces();
    if(newSpaces != oldSpaces)
    {
      $( document ).ready(function() {
        $("#toybox").load(" #toybox > *");      
      clearInterval(timerVar);
  });
    }
  },200);
};

Я обеспокоен тем, что это выглядит как крайне хакерским.Я запускаю функцию обновления один раз каждые 200 мс.Есть ли способ (как правило, желательно, но только в случае покупки, если это необходимо) попросить сам сервер сообщить мне, когда что-то изменилось?

1 Ответ

0 голосов
/ 11 июня 2018

Это кажется странным вопросом.Сервер не меняет корзину.Клиент меняет корзину.Поэтому, когда вы просите предпочтительный способ попросить сервер сообщить вам, когда что-то изменилось, ответ всегда будет, что никогда не произойдет.

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

Вот так работает Shopify корзина, и вы просите совета с этим, поэтому я надеюсь, что это поможет вам.Опрос каждые 200 мс, или Н мс, или любая секунда - бесполезное занятие, тратящее впустую циклы браузера.

...