2010-01-04 110 views
6

我有一個JavaScript函數,它使用jQuery創建兩個連續的Ajax請求。我想確保第一個請求在第二個函數被調用之前已經加載。有什麼辦法可以做到這一點?確保第一個Ajax函數在第二個之前完成

+1

它是需要等到第一個返回的第二個* Ajax *調用,還是需要等待的第二個*回調*? (也就是說,你是否需要在發出第二個Ajax請求之前等待,或者兩者都可以一個接一個地被觸發,但是你想確保如果第二個Ajax請求首先返回,它的回調將被阻止,直到第一個返回) – Graza 2010-01-04 23:34:54

+0

第二個函數在第一個函數完成之前不應該被觸發。第一個函數創建一個表單元素,第二個函數獲取該表單的值並根據它進行一些計算。 – Brian 2010-01-04 23:43:33

回答

7

可以在$.ajax選項中指定async: false,或者在complete第一次調用回調中進行第二次ajax調用。

+0

這不是'async:false'嗎? – 2010-01-04 23:31:13

+0

的確如此。補充負面的邏輯。 – 2010-01-04 23:32:28

+0

'async:false'很好。我稱這兩個函數的順序不同,所以它比回調方法更受歡迎。 – Brian 2010-01-04 23:38:42

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插件。你可以用這種方式排隊請求。

相關問題