浏览器的两个并行请求

时间:2012-10-23 08:32:58

标签: php jquery mysql ajax iframe

  

可能重复:
  Parallel asynchronous Ajax requests using jQuery

我需要一个接一个地创建2个ajax请求。然后显示先完成的结果。问题是第二个总是等待第一个完成。我试图中止第一个但仍然是第二个等待第一个完成。有没有解决方法?

基本上第一个调用php脚本来解析一些XML文件并将记录插入到MySQL表中。第二个调用PHP脚本,该脚本需要返回第一个已导入的20个记录。

我尝试了两个ajax调用,第一个调用来自iframe。但结果总是一样的。第二个是等待第一个完成。我找到的唯一方法是创建子域并使用子域调用第一个子域。但这不适用于IE。

有人可以解释如何解决这个问题吗?

也许我需要更多地描述我的问题。首先,我调用ajax执行时间是cca 2分钟,而第一个执行时我需要有多个请求来检索由第一个导入的记录。

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调用。它不依赖于第一次通话。