我需要一个接一个地创建2个ajax请求。然后显示先完成的结果。问题是第二个总是等待第一个完成。我试图中止第一个但仍然是第二个等待第一个完成。有没有解决方法?
基本上第一个调用php脚本来解析一些XML文件并将记录插入到MySQL表中。第二个调用PHP脚本,该脚本需要返回第一个已导入的20个记录。
我尝试了两个ajax调用,第一个调用来自iframe。但结果总是一样的。第二个是等待第一个完成。我找到的唯一方法是创建子域并使用子域调用第一个子域。但这不适用于IE。
有人可以解释如何解决这个问题吗?
也许我需要更多地描述我的问题。首先,我调用ajax执行时间是cca 2分钟,而第一个执行时我需要有多个请求来检索由第一个导入的记录。
答案 0 :(得分:3)
您可以尝试使用AJAX callback。您基本上可以输入嵌套回调并完成工作。获得解析后的XML将调用第一个回调,第一个回调将调用第二个回调。
更新代码示例:
var callback2 = function(data)
{
// Callbacks complete
// Now do some more stuff
}
var callback1 = function(data)
{
//do something;
$.ajax({
url: '/echo/html/',
success: function(data) {
callback2(data);
}
});
}
$.ajax({
url: '/echo/html/',
success: function(data) {
callback1(data);
}
});
在上面的示例中,当第二个Ajax调用完成时,将调用callback2。
答案 1 :(得分:-1)
按顺序调用它们。在调用第一个之后,它将以异步方式执行。然后你打电话给第二个。那时第一个请求仍将继续运行。但是没有保证第二个请求将在第一个请求之后发送。所以你可以暂停一下。见下面的例子。
$.post('ajax/first_call', function(data) {
// process returned data of first ajax call
});
window.setTimeout(function(){
$.post('ajax/second_call', function(data) {
// process returned data of second ajax call
});
}, 2000);
这里在2秒后请求第二个ajax调用。它不依赖于第一次通话。