2016-08-15 2 views
0

laravel을 사용하여 데이터베이스 (100mil ++ 데이터)에서 엄청난 양의 데이터를 가져 오지만 데이터로드가 너무 길어서 오류가 발생했습니다. 컨트롤러를 호출하여 Laravel보기의 데이터를 점진적으로 AJAX에 추가 한 다음 컨트롤러가 LIMIT를 사용하여 쿼리를 사용하여 데이터를 가져 오므로 제한된 데이터에 따라보기가 점진적으로 표시되므로 시간 초과가 발생하지 않습니다.AJAX - LARAVEL을 사용하여 데이터베이스에서 엄청난 양의 데이터를 점차적으로 표시

컨트롤러 :

public function index(){ 
    return view('users.index',compact('users')); 
} 

public function loadAjax(){ 
    // print_r('expression'); 
    $counter = Input::get('counter'); 
    $users = User::take(1)->skip($counter)->get(); 
    return json_encode($users); 
} 

및 JQuery와 AJAX :

,개
<script> 
    var ctr = 0; 
    window.onload = function() { 
    getData(); 
    }; 

    window.setInterval(function() { 
    ctr++; //increase the data offset 
    getData(); 
    }, 1000); 

function getData() { 
     jQuery(document).ready(function() { 
      jQuery.ajax({ 
       url: "users/ajax", 
       type: 'GET', 
       data: {counter : ctr}, 
       dataType: "json", 
       success: function(data) { 
        console.log(data.users); 
        for(var i =0; i < data.users.length; i++) { 
         var htm = ''; 
         htm += '<tr id="inside">' 
         htm += '<td>'+data.users[i].id+'</td>'; 
         htm += '<td>'+data.users[i].name+'</td>'; 
         htm += '<td>'+data.users[i].email+'</td>'; 
         htm += '</tr>' 
         $("#inside").append(htm); 
        } 
       }, 
       error: function(data) { 
       } 
      }); 
     }); 
    } 
</script> 

경로 :

Route::get('users/ajax','[email protected]'); 

문제가 내가 아약스와 함께 새로운 해요 나의 방법은 당신이 설명하고있는 페이지 매김 패턴이 무한 스크롤라고 올바른 방법

+0

색인을 사용하고 있지 않습니까? – Daan

+0

ajax 요청 코드와 Ajax 요청이 전송 된 컨트롤러를 공유하십시오. –

+0

이 목적으로 페이지 매김을 사용할 수 있다고 생각합니다. 다음은 샘플 코드입니다. https://gist.github.com/tobysteward/6163902 – jaysingkar

답변

1

경우 나도 몰라입니다. 첫 번째 x 레코드가 페이지에로드되고 후속 AJAX 호출이 더 많은 데이터를 요청하고이를보기의 목록에 추가합니다. 무한 스크롤 구현에 대한 자세한 내용은 Laracast입니다. 스크롤이 맨 아래에 도달하면 onScroll 이벤트에서 무한 스크롤 요청이 트리거됩니다. 또는 버튼을 사용하여 다음 요청을 트리거 할 수 있습니다.

클라이언트 메모리 제한으로 인해 브라우저에있는 모든 레코드를 표시 할 수 없습니다. 일반적으로 수백만 개의 객체가 DOM에서 잘 작동하지 않습니다. 결과적으로 큰 데이터 세트는 Infinite Scroll에 적합하지 않습니다. 평범한 오래된 페이지 매김을 강력히 추천합니다.

대용량 데이터 세트와 잘 작동하는 AJAX가 포함 된 즉시 사용 가능한 페이지 매김 툴킷은 jQuery Datatables입니다. 행운을 빕니다.

+0

내 질문을 편집 했습니까? –

+0

접근 방식의 문제점은 새로운 데이터 쿼리로 1 초 (1,000 밀리 초)마다 데이터베이스를 핑 (ping) 한 다음 모든 레코드로 DOM을 채우는 것입니다. 이 방법으로는 작동하지 않습니다. Laravel과 jQueryDatatables를 사용하여 해당 페이지에서 보려는 레코드 이상을로드하지 않고 레코드 세트의 페이지 매김을 확인해야합니다. 이 자습서/예제를 통해 빠르게 작동하는 예제를 볼 수 있습니다. http://laraveldaily.com/laravel-datatables-enchant-tables-ease/ –

관련 문제