javascript — прокрутка Jquery не выбирает измененное значение переменной для отправки в ajax

Я не обычный программист и узнал все, что я знаю о программировании, с помощью 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не меняется

Спасибо за прочтение. Было бы здорово, если кто-нибудь может помочь мне, пожалуйста.

0

Решение

Первая проблема, которую я вижу — в вашем $.ajax в complete обратный звонок вы прикрепляете новое событие на $(window) каждый раз, когда это выполняется. Поэтому, когда вы выполните 2 раза, будет вызвано 2 события и так далее. Измените логику, чтобы присоединить событие один раз и изменить его контекст, если это необходимо.

Второе — не путайте типы переменных. Вы выполняете IndexFeederLoader, передавая строки, но используя числа

JsFiddle, чтобы понять, что происходит

Итак, как вы делаете — я присоединяю событие снова и снова, передавая context переменная. Попробуйте нажать кнопку — в конечном итоге она вызовет много разных событий в своем собственном контексте. Это то, что, вероятно, вызывает ошибки в вашем коде.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]