来自浏览器的两个并行请求[重复]

Posted

技术标签:

【中文标题】来自浏览器的两个并行请求[重复]【英文标题】:Two parallel requests from browser [duplicate] 【发布时间】:2012-10-13 03:29:47 【问题描述】:

可能重复:Parallel asynchronous Ajax requests using jQuery

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

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

我尝试了两个 ajax 调用,第一个是从 iframe 调用的。但结果总是一样的。第二个正在等待第一个完成。我发现的唯一方法是创建子域并使用子域调用第一个。但这在 IE 中不起作用。

谁能解释一下如何解决这个问题?

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

【问题讨论】:

您正在寻找术语“异步 ajax 调用”。 @arkascha AsynchronousAjaxA 是的,我使用的是异步:var xhr=$.ajax( type: 'POST', url: aUrl, async: true, cache: false, data: pData, success: function(jData, status, xhr)... 但这没有帮助 @jere_hr 在成功函数中创建另一个 ajax 调用。请参阅我的答案中的示例。 【参考方案1】:

您可以尝试使用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。

【讨论】:

你能给我代码示例如何在第一个完成之前获得第二个响应吗?我使用了 $.ajax,但如果我能以某种方式管理它,那就太好了。感谢您的快速响应。 哦,等待并行请求,您可以依次调用 Ajax 请求,然后调用成功回调。第一个完成的会调用回调 如果我理解正确的话。 Callback1 将在第一个完成后调用。然后会触发callback2。也许我需要更多地描述我的问题。首先,我调用 ajax,执行时间为 cca 2 分钟,当第一个正在执行时,我需要有多个请求来检索第一个导入的记录。 callback1 会接收一些数据,对吗?该数据可以由第二个 ajax 调用异步处理。 我尝试使用 $([1,2]).each(function()...ajax 调用...但这没有帮助。看起来我不能拥有 2同时提出单独的请求?!【参考方案2】:

按顺序调用它们。在您调用第一个之后,它将以异步方式执行。然后你打电话给第二个。那时第一个请求将仍在运行。但它不保证第二个请求将在第一个请求之后发送。所以你可以有一些超时。请参阅下面的示例。

$.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 调用。而且它不依赖于第一次调用。

【讨论】:

但我不想等待第一个完成以获得第二个的响应。我需要在第一个完成之前得到第二个的响应。 你说Basically first one calls php script that parses some XML file and inserts records into a MySQL table. Second one calls PHP script which needs to return 20 records that first one has imported. 这里第一个脚本应该在你调用第二个脚本之前结束。否则第二个调用如何获取第一个导入的 20 条记录? 也许我需要更多地描述我的问题。首先,我调用 ajax,执行时间为 cca 2 分钟,当第一个正在执行时,我需要有多个请求来检索第一个导入的记录。 然后依次发送请求。在请求第二个时,第一个将被执行。 @jere_hr 查看更新 我试过了,但我无法从第二个得到响应,直到第一个没有完成。这正是我的问题。

以上是关于来自浏览器的两个并行请求[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Web 浏览器性能规则“每个主机名只有 2 个并行请求”仍然正确吗?

在 API(php)中 - 了解来自本机 iOS 应用程序或 Web 的请求的方式 [重复]

发送许多并行获取请求(超过最大浏览器支持)

PayPal 自适应付款:在两个浏览器选项卡中来自一个发件人的两次付款

烧瓶上的POST请求失败[重复]

当请求来自浏览器或在请求来自移动设备时发送JSON字典时呈现HTML