jQuery中的多个AJAX请求

时间:2011-02-10 16:04:26

标签: javascript 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
}

3 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:0)

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

我会继续思考这个......

答案 2 :(得分:0)

 $.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) {

  });