2011-11-30 4 views
1

다음 코드는 .each() 함수 끝에 약 50 회 반복됩니다.스크립트가 성공적으로 반환 될 때까지 jQuery ajax 스크립트를 일시 중지하십시오.

$.ajax({ 
    type: "POST", 
    url: "/process.php", 
    data: "info="+info, 
    success: function(html){ 
     // $('#container').html(html);   
    } 
}); 

어떻게 각 아약스 후 다음 .each()을 실행하기 전에 성공할 때까지 기다립니다 그래서 각 반복하는 동안 스크립트를 일시 정지 할 수 있습니다?

기본적으로 아약스 요청 대기를 방지하려고합니다.

+0

다음 AJAX 요청이 반환 될 때까지 발행을 차단하려고합니까? 무슨 목적을 위해? – wrschneider

답변

1

명시 적 루프를 사용하지 마십시오. 각 next-ajax 호출을 이전의 success 핸들러로 이동하십시오. 또는 queue the requests programmatically.

var numRequests = 50; 

function nextAjax() 
{ 
    if (numRequests > 0) 
    { 
     $.ajax({ 
      // snip... 
      success: function (html) { 
       // $('#container').html(html); 
       nextAjax(); 
      }  
     }); 
    } 

    numRequests--; 
} 

nextAjax(); 
1

async:false 속성을 추가하면됩니다. 예를 들면 :

$.ajax({ 
    type: "POST", 
    url: "/process.php", 
    data: "info="+info, 
    async: false, 
    success: function(html){ 
     // $('#container').html(html);   
    } 
}); 

그러나 모든 AJAX 호출이 완료 될 때까지 페이지가 본질적으로 "고정"됩니다. 이와 같이 동기식 요청을하는 것은 거의 필요하지 않으므로 사용자 경험이 그다지 중요하지 않은 내부 사용을 위해이 작업을 수행하지 않으면 비동기식으로 무엇을 달성 할 것인지 적극적으로 제안하는 것이 좋습니다. 너는 끝이야.

+1

제발 하지마. 그것은 UI에 대한 커다란 원인입니다. 이것은 여기를 포함하여 여러 곳에서 논의되었습니다 : http://stackoverflow.com/questions/5399080/can-this-be-done-without-synchronous-ajax –

+0

Eeeeeew, no. 이렇게하면 요청이 진행되는 동안 브라우저가 가장 불쾌하고 불필요한 방식으로 중단됩니다. –

+0

99.9 %의 사람들에게 전적으로 동의합니다. 그러므로 즉각적인 편집. – maxedison

0

콜백 기능을 사용하여 다음 요청을 시작하십시오.

관련 문제