来自浏览器的两个并行请求[重复]
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 Asynchronous 是 Ajax 的A
。
是的,我使用的是异步: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 的请求的方式 [重复]