JQuery AJAX живой результат проблемы - PullRequest
1 голос
/ 08 июня 2011

У меня есть страница результатов, где результат загружается с помощью ajax, и у меня есть слайдер jq ui для цены и флажки, которые изменяют результат в реальном времени.При каждом изменении загружается результат, но когда я начинаю быстро нажимать на флажки и ползунки, он каждый раз вызывает результат, и в какой-то момент он перестает работать.Установка таймера после каждого изменения - это не решение, которое я ищу.

Ответы [ 2 ]

1 голос
/ 08 июня 2011

Вам нужно использовать таймер, но не один для каждого изменения, только 1 глобальный таймер. Каждый раз, когда флажок установлен, ползунок перемещен и т. Д., Установите время ожидания, скажем, 500 мс для отправки вашего запроса ajax. Но каждый раз, когда вносятся изменения, также очищайте существующий таймер и устанавливайте новый.

Таким образом, отправка происходит только после 500 мс бездействия. Если пользователь щелкает счастливым, таймер очищается каждый раз, и только после того, как он перестает щелкать, ajax отправляется.

myForm.find( 'input, textarea, select' ).bind( 'change', function( )
{
   var self = $(this);

   self.attr( 'changed', 'changed' ); // -- mark as modified

   clearTimeout( $(document).data( 'ajaxTimer' )); // -- prevent previous changes from being submitted
   $(document).data( 'ajaxTimer', setTimeout( submitData, 500 )); // -- start new timer for submission
} );

function submitData( )
{
   var allInputs = myForm.find( 'input, textarea, select' );
   var changedInputs.filter( '[changed]' );

   allInputs.removeAttr( 'changed' ); // -- mark all as submitted

   changedInputs.each( function( )
   {
      // gather values here
   } );

   // build your AJAX request here
}
0 голосов
/ 08 июня 2011

Как указано в этом ответе: Остановить запрос AJAX с помощью jQuery , вы можете назначить запрос некоторой переменной, а затем, если эта переменная установлена, вы можете остановить уже ожидающий запрос, прежде чем сделать другой звоните .

Таким образом, результат, который вступит в силу, будет самым последним, и не должно быть путаницы.

Я вставляю сюда ответ, на который я ссылался:

var request = $.ajax({
    type: 'POST',
    url: 'someurl',
    success: function(result){}
});

Затем вы можете прервать запрос:

request.abort();
...