2012-02-12 5 views
3

여기에 조언이 필요합니다.Ajax 호출 루프, Ajax jQuery

나는이 상황에서 일부 JSON 데이터를 얻으 려하고 AJAX (jQuery 사용)를 생각했다.

아이디어는 내가 필요로하는 모든 데이터를 얻기 위해 더 많은 데이터가 필요하고 1 또는 2 개의 Ajax Call이 필요합니다.

그래서 다중 Ajax 호출을 만들어야하며 최선의 방법을 찾으려고 노력합니다 (모범 사례).

var dataArr = { 
    page:0, 
    pageSize : 1000 
}; 


var StoreData = []; 

var getSomeData = function() { 

    $.ajax({ 
     type : "GET", 
     url : URL, 
     data : dataArr, 
     dataType : "json", 
     error : OnLoadError, 
     success :function(data, status){ 

      StoreData.push[data]; 
      if(data.length){ 
       dataArr.page = dataArr.page + 1 
       getSomeData(); 
      } 

     } 
    }); 
}; 

추가 정보 :

내 머리에 처음 온

하나 개의 아이디어는 이런 일이 (이 어떤 구문하는 오류 또는 지금 논리를 찾고 심지어 뭔가 악화를 가질 수)입니다

약 4-9 Ajax 호출로 모든 데이터를 가져올 수 있습니다 (4000-9000 항목).

나는 pageSize : 1000을 테스트하여 정상적으로 작동하므로 통화 당 1000 개의 항목을 얻을 수 있습니다. 당신은 몇 가지 조언 좀 도와 수 있다면

그래서 하나를 기존의 일부 변경 또는 다른 더 좋은 방법은, 심지어 일부 예, 정말

감사합니다 모두 감사 것을 할 수 있습니다!

답변

1

완료되면 서버 측에서 플래그를 설정하고이를 성공 함수의 상태 매개 변수에 넣을 수 있습니다. 그러면 코드가 정리 될 것입니다. 그렇지 않으면 간단히 while 루프를 추가하고 호출을 동기식으로 정의하고 루프 조건 내에서 호출이 완료되었는지 확인할 수 있습니다.

+0

불행히도 클라이언트 사이트를 사용할 수 있습니다. – AlexC

+0

귀하의 접근 방식은 전혀 잘못되지 않는 것 같습니다. 마지막에 추가 요청이 하나 있습니다. ajax 호출을 실제로 실행하기 전에 조건을 추가하여이를 피하십시오. // Update - 나는 방금 그럴 수 없다고 생각했다. 만약 당신이 체크하지 않았다면, 그 빈 경우를 안다. – danwit

+0

Ok는 사실을 직면하게합니다. 정의되지 않은 양의 요청이 있으면 마지막 패키지가 있는지 알려주는 서버 측보고가 없습니다.나는 당신이 그렇게하고 여분의 요청을 추가하는 것보다 더 좋은 생각이 없습니다. 그러나 헤이, 그것이 당신의 서버가 아니면 걱정하지 않아도 될까요? ;) – danwit

0

우선 페이지 크기를 최적화해야합니다. 1000으로 정의하는 것이 쉬운 방법입니다. 응용 프로그램의 성능이 중요하지 않은 경우이 대답의 나머지 부분을 읽지 마십시오.

나는 시행 착오 기반 접근 방식을 제안합니다. for 루프를 만들고 페이지 크기 (20, 50, 100, 500, 1000, 1500 등)에 대해 다른 숫자를 시도하십시오. 그런 다음 각 페이지 크기에 대한 요청 로그 수 및 모든 요청에 ​​대한 총 시간. 이 숫자를 비교하고 페이지 크기를 현명하게 선택하십시오.

둘째, 서버에서 오는 요소의 수를 계산할 수 있다면 마침내 불필요한 요청을 보내지 않아도됩니다. 4650 데이터를 얻고 있다고 가정하십시오. 1000, + 1000, +1000, +1000 및 +650이됩니다. 당신이 어떻게 든 당신이 1000 명보다 적게 나가고 있다고 생각하면, 당신은 마지막 요청을 보내지 않을 것입니다, 그렇지 않습니까?

<li class='item'>XXX</li> 
// All list items 
<li class='item'>YYY</li> 

그런 다음 jQuery로 리튬의 수를 계산하고, 당신의 페이지 크기보다 작은 경우, 당신이 당신이 필요로하는 모든 데이터를 얻을 수 있다는 것을 의미 : 응답 형식을 가정하는 것은 같은 것입니다.

마지막으로 총 데이터 길이가 4000을 초과하는 경우 처음 네 개의 요청을 비동기 적으로 보낼 수 있습니다.