jQuery中的多个AJAX请求

我有一个函数从两个位置提取数据,并将返回的内容放在显示给用户的模式对话框中。

这两个请求都是异步的,因为它们是跨域的。 问题在于我不希望在两个请求都完成加载之前显示模态。 在加载模态之前,如何检查以确保两个请求都已完成?

我已经尝试将openModal函数放在第二个请求的成功处理程序中,并且在第一个请求在第二个请求之前完成加载时有效,但有时情况并非如此。

这是我的代码的副本:

function loadData(id) { $.ajax({ type: 'GET', url: 'https://someurl.com/v1.0/controller1/' + id, dataType: 'jsonp', success: function(data) { // Do some stuff to the data } }); $.ajax({ type: 'GET', url: 'https://someurl.com/v1.0/controller2/' + id, dataType: 'jsonp', success: function(data) { // Do some stuff to the data openModal(); } }); } function openModal() { // Open the modal } 

看看新版本的jQuery – 1.5。 它完全支持您的问题,您可以查看此博客文章以解决您的问题: http : //www.erichynds.com/jquery/using-deferreds-in-jquery/

您可以将其中一个ajax请求放在另一个请求的成功回调中,但这不会像同时请求它们一样有效。 然后你只需要将openModal调用放在内部ajax请求的成功回调中。 如果找到更好的选择,这个解决方案对您有用,那么这将是一个快速而简单的解决方案。

我会继续思考这一个……

  $.when( $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", { tags: "moon", tagmode: "any", format: "json" }), $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", { tags: "bird", tagmode: "any", format: "json" })).then(function (res1, res2) { });