2013-07-05 4 views
0

Я загружаю facebook какbox onscroll. но каждый раз, когда я прокручиваю вверх/вниз, ajax запускается. Я хочу, чтобы ajax срабатывал только один раз. Вот мой код:Выполнять вызов ajax только один раз

jQuery(document).ready(function() { 
    jQuery(window).scroll(function() { 
     var scroll = jQuery(window).scrollTop(); 

     if (scroll <= 770) { 
     jQuery.get('ajax/facebook.html', function(data) { jQuery('.fblikeajax').html(data);}); 
     } 

    }); 
}); 
+0

взгляд на этот пример: http://stackoverflow.com/ Вопросы/9758527/jquery-callback-on-end-of-page-scroll – krishgopinath

ответ

4

Используйте JQuery в on() и off()

$(document).on("scroll", scrollcheck); 

var scrollcheck = function() { 
    var scroll = jQuery(window).scrollTop(); 
    if (scroll <= 770) { 
     jQuery.get('ajax/facebook.html', function (data) { 
      jQuery('.fblikeajax').html(data); 
     }); 
     $(document).off("scroll", scrollcheck); 
    } 
} 
+0

симпатичный! спасибо за решение. – Towfiq

+0

Почему бы не использовать .one? – Towfiq

+0

'one' будет запускаться только один раз, но это не значит, что ваш оператор' if' проходит. Для событий кликов и т. Д. Вы можете использовать 'one' – Jonathan

0

Unbind слушателя событий после того, как он стреляет:

jQuery(document).ready(function() { 
    var scrollHandler = function() { 
     var scroll = jQuery(window).scrollTop(); 

     if (scroll <= 770) { 
     jQuery.get('ajax/facebook.html', function(data) { jQuery('.fblikeajax').html(data);}); 
     } 
     $(window).unbind('scroll', scrollHandler); 
    } 
    jQuery(window).scroll(scrollHandler); 
}); 

Я не проверял этот код, но он должен быть очень близко.

1

Вы можете добавить в переменную, которая проверяет, если Аякса был уволен:

jQuery(document).ready(function() { 
    var ajax_fired = false; 
    jQuery(window).scroll(function() { 
     var scroll = jQuery(window).scrollTop(); 

     if ((scroll <= 770) && !ajax_fired) { 
      ajax_fired = true; 
      jQuery.get('ajax/facebook.html', function(data) { 
       jQuery('.fblikeajax').html(data); 

      }); 
     } 

    }); 
}); 
+0

Это все еще имеет потенциал, чтобы скрыть запросы до получения первого ответа и изменения флага 'ajax_fired'. – Jasen

+0

Вы правы. Редактирование ответа, чтобы исправить эту проблему –

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