2010-01-04 99 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插件。你可以用这种方式排队请求。

相关问题