Я не обычный программист и узнал все, что я знаю о программировании, с помощью Google или задавая вопросы здесь из Stackoverflow.
Я пытаюсь создать функцию ajax, которая будет получать каналы из базы данных при прокрутке на основе выбранного параметра. Пользователь может выбрать либо выбрать общедоступные или личные каналы. Его выбранное значение обновляется в скрытом текстовом поле. Код следует следующим образом.
//feed menu switch between personal and public
$('.menu_selection').iCheck({
checkboxClass: 'icheckbox_square',
radioClass: 'iradio_square-blue',
increaseArea: '20%' // optional
});
$("body").on("ifChecked",".menu_selection",function(){
var feed_menu_selected = $(this).val();
$("#feed_menu_selected").val(feed_menu_selected);
$("#member_menu_area").html(loader);
IndexFeederLoader('0','0','0');
});
Теперь это функция, которая извлекает записи, где group_no
набор записей выбирается, total_m_group
общее количество записей, feed_menu_selected
это выбор между государственным или частным.
function IndexFeederLoader(group_no,total_m_group,movie_shown){
var feed_menu_selected = $("#feed_menu_selected").val();
$.ajax({
url: '../index-feeds.php',
type: "POST",
dataType:"text",
data: 'feed_menu_selected='+feed_menu_selected+'&group_no='+group_no+'&movie_shown='+movie_shown,
cache: false,
async: false,
success: function(data){
if(group_no == 0)
{
$("#member_menu_area").html(data);
//when personal is checked and not signed in
var notsigned = $(data).filter('#notsigned').text();
if( notsigned !== '')
{
$("#SignInForPersonal").show();
}
}
else
{
$("#member_menu_area").append(data);
}
total_m_group = $("#total_page_no").text();
$("#total_m_group").remove(); // removing extra
movie_shown = $("#movie_shown").text();
$("#movie_shown").remove(); // removing extra
},
complete: function(){
$(window).on("scroll",function(){
var closeToBottom = ($(window).scrollTop() + $(window).height() > $(document).height() - 500);
var AtBottom = ($(window).scrollTop() + $(window).height() == $(document).height());
if (closeToBottom || AtBottom)
{
if( total_m_group != 0 )
{
if( group_no < total_m_group )
{
group_no++;
IndexFeederLoader(group_no,total_m_group,movie_shown); // group_no is not changing
}
}
else
{
group_no = 0;
}
}
});
},
error:function (xhr, ajaxOptions, thrownError){
alert(thrownError);
}
});
}
Теперь проблема. Если я не переключаюсь между публичным и личным, все идет хорошо, и я получаю записи в порядке, установленном group_no. Но когда я выбираю личный, а затем возвращаюсь к личному, он не работает, давая каналы с самого начала, а с того места, где он ушел. Это похоже на group_no
не меняется
Спасибо за прочтение. Было бы здорово, если кто-нибудь может помочь мне, пожалуйста.
Первая проблема, которую я вижу — в вашем $.ajax
в complete
обратный звонок вы прикрепляете новое событие на $(window)
каждый раз, когда это выполняется. Поэтому, когда вы выполните 2 раза, будет вызвано 2 события и так далее. Измените логику, чтобы присоединить событие один раз и изменить его контекст, если это необходимо.
Второе — не путайте типы переменных. Вы выполняете IndexFeederLoader, передавая строки, но используя числа
JsFiddle, чтобы понять, что происходит
Итак, как вы делаете — я присоединяю событие снова и снова, передавая context
переменная. Попробуйте нажать кнопку — в конечном итоге она вызовет много разных событий в своем собственном контексте. Это то, что, вероятно, вызывает ошибки в вашем коде.
Других решений пока нет …