2012-01-08 2 views
2

jQuery를 사용하여 아약스 페이지 매김을 만들려고합니다. 나는 큰 문제가 있지만 작동하도록하고있다 :jQuery AJAX 페이지 매김 기하 급수적 인 반복을 방지하는 방법은 무엇입니까?

페이지 번호는 < <- 첫 번째 < - 이전 페이지 1 페이지 2 다음 -> 마지막 - >>과 각 버튼이 작동합니다. pagenum은 아약스를 통해 보내지고 해당 페이지 번호와 관련된 게시물을 표시 할 때 페이지가 놓이는 DIV를 다시로드합니다 (페이지 1 = 게시물 1-10 등).

합계 2 페이지 중 1 페이지에 있다고 가정합니다. Page 2, Next, Last를 클릭하면 2 페이지로 이동합니다. 그런 다음 Page 1, Previous 또는 Last를 클릭하면 1 페이지로 이동되지만 Ajax가 두 번 실행됩니다.

페이지 2, 다음 또는 마지막 페이지 2를 다시 클릭하면 다시해야하지만 아약스는 4 번 실행됩니다. 1 페이지로 돌아 가면 아약스가 8 번 실행됩니다.

어디서 볼 수 있습니까? 내가 3 개 파일에 대한 내 코드를 포함하고

: 콘텐츠가 getposts.php를로드

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

fetchposts.js 안에 표시되는

의 index.php는 (WordPress의 물건에서 내 콘텐츠를 seperates) 게시물뿐만 아니라 매김을 (문제가 일어나고있는 곳이 어디 홍보 때문에이 포함에만 매김 코드로드

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

getposts.php

  • 나는 코드를 청소해야 알고 : oblem 내가 분명히 몇 가지를 만들고 싶어)

    <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> 
    

    입니다. 이 루프를 먼저 고정시키고 싶습니다.

  • 아약스 자체가 작동합니다. 적절한 값을 보내고 검색합니다.
  • 변수는 모두 선언하고 잘 설정합니다.

그래서 다시, 문제는 잘 기능하고 적절한 장소에 저를 보내는 동안 아약스가, 화재가 기하 급수적으로 나는 매김 사용 횟수에 따라이다 : 1 개 클릭이 아약스를 한 번 만 2 클릭 화재 화재 그것을 두 번, 3 번 클릭하면 4 번, 4 번은 8 번 등이 발생합니다.

그래서 질문입니다 : 어떻게 지수 루프를 멈 춥니 까?

답변

1

live() 내가 볼 수있는 한 원인은 ...

나는 뒤쪽 고유 ID를 &을 할당하고 (당신이 JSON 헤더를 통과 된 후로 json_encode()는, 그것은 previouse 페이지 링크 $array_of_vals_for_json['back_button']=$thispage-1; 같은 것입니다 가정 스크립트의 PHP 부분에 현재 페이지를 설정합니다.

는 우리가 당신의 PHP가 어떤 괜찮은 제안을 위해 무엇을하고 있는지 볼 필요가 있다고 생각하지만, 나는 라이브가 그래도. 페이지 매김 새로 고침하는 것을 할 수없는 반복

+0

PHP는 중요하지 않습니다. MySQL 쿼리 및 일부 변수 일뿐입니다. 문제는 자바 스크립트와 자바 스크립트에만 있습니다. 그 ebing은 live()가 실제로 원인이라고 생각 하겠지만, 그것을 대체하기 위해 무엇을 할 수 있습니까? – Sweepster

+0

live()를 on()으로 바꾸는 것이 트릭을 완료 한 것으로 보입니다. – Sweepster

+0

PetersenDidIt Suggested에서 나머지 스크립트가 생성 한 새 요소를 가져올 때 live()를 '상위'페이지로 이동하십시오. – Umut

0

getposts.php을로드하면 라이브 이벤트가 getposts.php을로드 할 때마다 바인딩됩니다.

페이지로드 fetchposts.js는 getposts.php을로드하고 라이브 클릭 이벤트를 바인딩합니다. 그런 다음 링크를 클릭하면 getposts.php이 다시로드되고 라이브 클릭 이벤트가 다시 바인딩됩니다. 루프.

js 코드를 fetchposts.js로 옮기면 좋을 것입니다.

+0

의 원인 확신 사용자가 주어진 값으로 게시물을 숨길 수있는 이유는 숨겨져있을 때 getposts.php가 다시로드되어 다른 게시물 집합을 반환하므로 페이지 매김을 다시해야한다는 것입니다. 적절한 수의 페이지를 표시하기 위해 그 옆에 새롭게 표시됩니다. 아이디어가 있으십니까? 나는 그 이유로 다른 파일에 내 페이지 매김을하고 싶지 않습니다. 이렇게하면 똑같은 mysql 쿼리를 만들어서 페이지 매김이 같은 변수와 쿼리가 getposts.php에있을 때 리소스를 낭비하는 변수를 잡을 수 있습니다. – Sweepster

+0

이벤트를'fetchposts.js '파일. 그것들은'live' 이벤트이기 때문에 페이지로드 후에 html을 변경하는 것을 처리 할 것입니다. – PetersenDidIt

+0

live()를 on()으로 바꿨습니다. 문제가 해결 된 것 같습니다. – Sweepster

관련 문제