2012-06-26 3 views
0

이전에 Ajax를 작성한 적이 없으며 현재 무한 스크롤 페이지를 코딩하려고합니다. 사용자가 페이지 아래쪽으로 스크롤하면 더 많은 항목이로드되지만 현재로드되지 않습니다. 경고는 내가 바닥을 쳤을 때 표시되며,JQuery 게시 메서드가 실행되지 않습니다.

window.onload=function(){ 
//Find out how many items I have loaded and what filter I am using so I can make the Ajax call 
var vloaded = <?php echo $i; ?>; 
var vfilter = "<?php echo $filter ?>"; 
$(window).on('scroll', function() { 
    if ($(window).height() + $(window).scrollTop() >= $(document).height() - 10) { 
    //I have reached the bottom of the page, now load items 
    alert("loaded is " + vloaded + " and filter is " + vfilter); 
    $.post("/organizer/getMore", 
     { filter: vfilter, loaded: vloaded }, 
       function(responseText) { 
        $("grid").append(responseText); 
       },"html"); 
    //I've loaded the next 30 items, increment my counter for next time 
    vloaded +=30; 
    } 
}); 
} 

내 변수가 올바르게 증가한다 : 여기가 바닥을 쳤을 때 감지하고 Ajax 호출을 내 자바 스크립트입니다. 나는 젠드 프레임 워크를 사용하고, 그래서 여기 내 getMoreAction() 함수에 URL 포인트 : 나는 또한 페이지가 처음로드를 사용하고 있기 때문에

public function getmoreAction() 
{ 
//Used by Ajax to get more items for the infinite scroll 
    //Figure out how I'm filtering items and how many I've already loaded 
    $filter = $_POST['filter']; 
    $loaded = $_POST['loaded']; 
    echo "Filter is ".$filter; 
    echo "Loaded ".$loaded; 
    //Get all the items in the database ordered by filter 
    require_once(APPLICATION_PATH . '/models/ItemArray.php'); 
    $items = ItemArray::getItems($user->getID(), $filter, $loaded); 
    //Return items back to Ajax call, converted to html 
    echoItems($items); 
} 

나는 이미 getItems 기능이 작동 알고, echoItems 단지입니다 루프는 다른 항목에서도 작동하는 각 항목에 대한 html을 표시합니다. 액션의 에코는 절대로 실행되지 않습니다. 그래서 나는 포스트 콜에 문제가 있다고 가정하고 있습니다.

+1

방화 광을 사용합니까? 그렇지 않은 경우 Firefox에 대한 추가 기능으로 ajax 요청의 게시물/응답 (및 기타 자세한 내용)을 빠르게 볼 수 있으므로 빠르고 쉽게 진행되는 것을 볼 수 있습니다. –

+0

또한 Chrome 또는 IE를 사용하는 경우 F12 버튼이 내장 콘솔을 불러옵니다. – efesar

+0

글쎄, 방화 광에서 나는 정의되지 않은 사용자로부터 치명적인 오류가 발생한다는 것을 알았다. 나는 그것을 고쳤다. 그러나 아직도 아무것도 일어나지 않고있다. 아래로 스크롤 할 때마다 경고 상자가 다시 팝업되지만 새 항목이로드되지 않습니다. id 'grid'를 가진 요소의 끝 부분에 변수'responseText'에 포함 된 html을 추가해야합니다. 맞습니까? 또한 파이어 폭스에서는 아래쪽으로 10 픽셀 이내로 스크롤 할 때보 다 10 픽셀 아래로 스크롤 할 때마다 경고 상자가 팝업되는 것으로 보입니다. – jaimerump

답변

1

제안 사항.

  1. window.onload 속성 대신 $(document).ready() jQuery 함수를 사용하십시오. 난 그냥 내가 더 쉽게 읽을 수 리팩토링
  2. $.post()

대신 jQuery를 기능 $.ajax()를 사용합니다.

// put these in the global scope 
var vloaded = <?php echo $i; ?>; 
var vfilter = "<?php echo $filter ?>"; 

$(document).ready() 
{ 

    // I forgot to leave this in 
    $(window).on('scroll', function() 
    { 
     var height = $(window).height(); 
     var scrollTop = $(window).scrollTop(); 
     var dHeight = $(document).height(); 

     if(height + scrollTop >= dHeight - 10) 
     { 
      alert("loaded is " + vloaded + " and filter is " + vfilter); 

      // an AJAX request instead of a POST request 
      $.ajax 
      (
      { 
       type: "POST", 
       url: "/organizer/getMore", 
       data: { filter: vfilter, loaded: vloaded }, 
       dataType: "html", 
       success: function(responseText, textStatus, XHR) 
       { 
       // select the element with the ID grid and insert the HTML 
       $("#grid").html(responseText); 
       } 
      } 
     ); 

      // global variable 
      vloaded +=30; 

     } // if 
    } 

); // on 

} // ready 
+0

'$ (document) .ready()'를 사용하면 더 이상 경고가 나타나지 않으며 Firefox에서는 어떤 이유에서든 페이지의 레이아웃을 엉망으로 만듭니다. – jaimerump

+0

Ajax가 실행될 때마다 Zend_Layout에 의해 삽입 된 별도의 파일에있는 내 바닥 글을 복제하는 것으로 보입니다. 그리고 firefox에서는 하단 대신 상단에서 10 픽셀 씩 실행됩니다. – jaimerump

+0

웹에서 볼 수있는 URL이 있습니까? – efesar

관련 문제