2010-01-04 5 views
6

jQuery를 사용하여 두 번의 연속 된 Ajax 요청을하는 JavaScript 함수가 있습니다. 두 번째 함수가 호출되기 전에 첫 번째 요청이로드되었는지 확인하려고합니다. 내가 할 수있는 방법이 있니?첫 번째 아약스 함수가 ​​두 번째 코드보다 먼저 완료되는지 확인하십시오.

+1

첫 번째 것이 반환 될 때까지 기다려야하는 두 번째 * Ajax * 호출입니까, 아니면 기다려야하는 두 번째 * 콜백 *입니까? (즉, 두 번째 아약스 요청을 해고하기 전에 기다려야합니까, 아니면 둘 다 해고 될 수 있지만 두 번째가 먼저 반환되면 콜백은 첫 번째 반환 될 때까지 차단됩니다) – Graza

+0

두 번째 함수는 첫 번째 함수가 완료 될 때까지 실행되지 않아야합니다. 첫 번째 함수는 양식 요소를 만들고 두 번째는 양식 값을 가져 와서이를 기반으로 계산을 수행합니다. – Brian

답변

7

$.ajax 옵션에 async: false을 지정하거나 첫 번째 호출의 complete 콜백에서 두 번째 ajax 호출을 지정하십시오.

+0

'async : false'가 아닐까요? –

+0

실제로 그렇게됩니다. 그 부정적인 논리를 버려라. –

+0

'async : false'는 훌륭하게 작동합니다. 두 함수를 호출하는 순서가 다양하기 때문에 콜백 메소드보다 훨씬 선호됩니다. – Brian

0

첫 번째 기능에 대한 콜백에서 두 번째 전화를 겁니다.

0

최상의 결과를 얻으려면 첫 번째 콜백 콜백에서 두 번째 함수를 호출해야합니다. 예를 들어

:

$.post("http://www.somewebsite.com/page.php", function(data) { 
    // whatever 
    function2(); 
}); 
0
$.post("script1.php", {data:"val"}, function(response) { 
    $.post("script2.php", {data:response}, function(results) { 
    // this second call will be initialized when the first finishes 
    }); 
}); 
0

예제 구현 :

function callback() {$('div#second_ajax_output').load('http://www.google.com');} 
$('div#first_ajax_output').load('http://www.yahoo.com',callback); 
-1

편집 : 오해 질문; 내 잘못이야. 동시에 두 개의 AJAX 요청을 동시에 실행하기를 원하지만 두 작업이 완료된 후에 만 ​​콜백을 실행하는 경우, 이렇게하는 방법입니다!

이 시도 :

var completedCount = 0; 
var callback = function() 
{ 
    completedCount++; 
    if (completedCount == 2) 
    { 
     // Do something. 
    } 
}; 

$.post('url-1', {}, callback); 
$.post('url-2', {}, callback); 
0

가장 간단한 방법은 다음과 같이이다 jQuery를 사용하여 :

$.ajax({ 
    type: "POST", 
    url: "some.php",  
    success: function(msg){ 
     $.ajax({ 
     type: "POST", 
     url: "some2.php", 

     success: function(msg){ 
      alert("End of second call"); 
     } 
     }); 
    } 
}); 
0

간단한 방법은 두 번째 요청을 발사 할 때 (전체 콜백에서) 처음으로 돌아갑니다.

더 복잡한 방법이 필요한 경우 AjaxQueue 플러그인을 살펴보십시오. 이 방법으로 요청을 큐에 넣을 수 있습니다.

관련 문제