我有一个从两个位置提取数据的函数,并将返回的内容放在一个显示给用户的模态对话框中。
这两个请求都是异步的,因为它们是跨域的。问题在于我不希望在两个请求都完成加载之前显示模态。如何在加载模态之前检查以确保两个请求都已完成?
我已尝试将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
}
答案 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) {
});