2012-02-01 3 views
0

이것은 json 파일이 PHP 스크립트를 질식시키고 임의의 에러를 생성 할 때 15 패스라고 말하면서 PHP 데이터를 검색하는 데 효과적입니다. 내 생각에 요청은 PHP 스크립트가 작동하는 것보다 빠르다는 단서 아약스 요청으로 인해 모두 생성되기 때문에 PHP 스크립트가 혼란스러워지고 있습니까?Ajax 루프 PHP 스크립트를 압도

$(document).ready(function(){ 

     var ajax_load = "<div class='loadwrap'><img class='load' src='/img/load.gif' style='width:12px;' alt='' /> fetching list...</div>"; 

     $("#status").html(ajax_load); 

     $.getJSON('/fsbo/get_urls_24_hours', function(data) { 

      $("#alias").fadeOut('slow'); 
      var ajax_load = "<div class='loadwrap'><img class='load' src='/img/load.gif' style='width:12px;' alt='' /> fetching property...</div>"; 

      $('#props').html('');  

       $.each(data, function(key, val) { 
        $.ajax({ 
         type: "POST", 
         url: base_url + "/fsbo/get_property", 
         data: "url="+ val, 
         cache:false, 
         success: 
         function(data){ 
         $("<div></div>").html(data).appendTo('#props'); 
         } 
        }); 

       }); 
     }); 
    }); 

참고로 숨기기로드 GIF는 어디에 넣어야합니까? 루프를 끝내면 데이터가 반환되기를 기다리지 않고 열리고 닫히는 것이 좋습니다.

+0

로딩 gif의 경우 : AJAX 요청을 시작하기 직전에 표시하고 AJAX 요청의 콜백 함수에서 숨 깁니다. –

+0

작동하지 않습니다. 그런 다음 숨 깁니다. 나중에 항목이 추가됩니다. – Robert

답변

1

내가 전화를했기 때문에 올바른 대답을했다고 생각합니다.

PHP 호출 방식은 시스템에 대한 별도의 호출을 작성하는 것과 동시에 다양한 다른 라이브러리를 호출하는 것입니다. 따라서 일종의 메모리 누수가 발생하여 기한이 길어지고 필요한 자원이 증가합니다.

필자가 제안하는 것은 PHP에 모든 변수를 전달하고 작업을 수행 한 다음 JSON 객체를 다시 받아 구문 분석하는 것입니다.

최종 사용자에게는 약간 느릴 수 있지만 이러한 일이 발생하지 않도록해야합니다.

P.

이런 종류의 호출이 한 사용자에 대해 너무 많은 요청을 만들어 전체 웹 서버가 충돌 할 때 비슷한 문제가있었습니다.

3

일반적으로 루프에서 AJAX 요청을 만드는 것은 좋지 않습니다. 100 통화를하기보다는 원래의 호출을 수정하여 JSON에서 원하는 모든 데이터를 반환하는 것이 아닌가?

어떤 이유로 든이를 피할 수없는 경우 보류중인 요청 수를 제한하십시오. 예를 들어 첫 번째 5 개 요청을 보낸 다음 첫 번째 5 개 중 하나에서 응답을 받으면 6 번째 만 보냅니다. 이렇게하면 5 개의 요청 만 보류 상태가되어 서버에 100 개가 동시에 적용되지 않습니다.

2

이 코드는 킬러입니다.

$.each(data, function(key, val) { 
     $.ajax({ 

data의 길이가 100 인 경우

은 서버 100 개 HTTP 연결이있을 것이다. 이것은 분명히 당신의 서버를 질식시킬 것입니다. 게다가 브라우저가 느려집니다. 그것은 파이어 폭스에서 한 번에 100 탭을 여는 것과 비슷합니다.

모든 데이터를 단일 Ajax 요청으로 전달하십시오. 크기가 크면 청크로 청크를 보내십시오. 첫 번째 응답을 받으면 다음 청크에 대한 요청을 보냅니다. 그러나 동시에 보내지 마십시오.