JQuery AJAX нумерация страниц, как предотвратить экспоненциальный цикл? - PullRequest
2 голосов
/ 09 января 2012

Я пытаюсь создать ajax-нумерацию с помощью jQuery. Я получаю его на работу, но с огромной проблемой:

Разбиение на страницы состоит из << - First <-Previous Page1 Page2 Next-> Last - >>, и каждая кнопка работает. Страница отправляется через ajax и перезагружает DIV, на котором находится страница, отображая сообщения, относящиеся к этому номеру страницы (Страница 1 = сообщения 1-10 и т. Д.).

Предположим, мы находимся на странице 1 из 2 страниц. Нажав на страницу 2, Далее или Последняя, ​​вы попадете на страницу 2, как и должно быть. Если я затем нажимаю «Страница 1», «Предыдущая» или «Последняя», меня переводят на страницу 1, как следует, но ajax запускается дважды.

Если я затем снова нажму Страница 2, Далее или Последняя, ​​я попаду на страницу 2, снова, как я должен, но ajax запускается 4 раза. Если я вернусь на страницу 1, ajax запускается 8 раз.

Вы можете видеть, куда я иду с этим.

Я включаю свой код для 3 файлов:

index.php, в котором содержимое отображается внутри

<script type="text/javascript" src="fetchposts.js"></script>
<div id="contPaginated">
    <div id="content"></div>
</div>

fetchposts.js, который загружает getposts.php (отделяет мой контент от WordPress)

$(document).ready(function() {
     $('#content').load('getposts.php');
});

getposts.php, который загружает посты, а также нумерацию страниц (здесь возникает проблема, включается только код разбиения на страницы, поскольку именно здесь проблема)

<script type="text/javascript">
$(document).ready(function() {
var first = 1;
var currentPage = 1;
var numrows = <?php echo $rows; ?>;
var pagerows = <?php echo $page_rows; ?>;
var last = <?php echo $last; ?>;
var pagenum = '';
var hideLikes = <?php echo $hideLikes; ?>;
var hideDislikes = <?php echo $hideDislikes; ?>;

for (i = 1; i <= last; i++){
    $('<div id="page_' + i + '" class="pageNum"><a href="#">' + i + '</a></div>').appendTo('.pages');
}

$('.pageNum').live('click', function() {
    pagenum = $(this).attr('id').replace('page_', '');
    paginationAjax();
    return false;
});

$('.first').live('click', function() {
    pagenum = first;
    paginationAjax();
    return false;
});

$('.previous').live('click', function() {
    pagenum = Math.max(currentPage - 1, first);
    paginationAjax();
    return false;
});

$('.next').live('click', function() {
    pagenum = Math.min(currentPage + 1, last);
    paginationAjax();
    return false;
});

$('.last').live('click', function() {
    pagenum = last;
    paginationAjax();
    return false;
});

function paginationAjax(){
    // Send values to database
    $.ajax({
        url: 'getposts.php',
        //check.php receives the values sent to it and stores them in the database
        type: 'GET',
        data: 'pagenum=' + pagenum,
        success: function(callback) {
            $('#content').html('').html(callback);
        }
    });
}
});
</script>

<div class="Pagination">
<div class ="Pagination-inside-top">
    <div class="first">
        <a href=''> <<-First </a>
    </div>

    <div class="previous">  
        <a href=''> <-Previous</a>
    </div>

    <div class="pages"></div>

    <div class="next">
        <a href=''>Next -> </a>
    </div>

    <div class="last">
        <a href=''>Last ->></a>
    </div>
</div>
</div>

Я хочу прояснить некоторые вещи:

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

Итак, проблема в том, что ajax, хотя он работает нормально и отправляет меня в нужное место, срабатывает экспоненциально, исходя из того, сколько раз я использую нумерацию страниц: 1 щелчок запускает ajax один раз, а 2 щелчка запускает его дважды, 3 щелчка запускает его 4 раза, 4 щелчка = 8 и т. Д.

Итак, вопрос: как мне остановить экспоненциальный цикл?

Ответы [ 2 ]

1 голос
/ 09 января 2012

Ваши live() s являются причиной, насколько я могу видеть ...

Я бы назначил Back & Forward уникальный идентификатор и установил бы текущую страницу в php-части вашего скрипта (при условии, что выпередают заголовки json, а затем json_encode (), это будет что-то вроде $array_of_vals_for_json['back_button']=$thispage-1; для предыдущей ссылки на страницу.

Я думаю, нам нужно посмотреть, что делает ваш php, чтобы делать какие-то достойные предложения, но япочти уверен, что твоя жизнь является причиной зацикливания

0 голосов
/ 09 января 2012

Вы загружаете getposts.php несколько раз, что приводит к тому, что живые события связываются при каждой загрузке getposts.php.

На странице загрузки fetchposts.js загружает getposts.php и привязывает события живого клика,Затем вы нажимаете на ссылку, и она снова загружает getposts.php и снова связывает события живого клика.и цикл.

Переместите свой js-код в fetchposts.js, и все будет хорошо.

...