【问题标题】: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 调用。请参阅我的答案中的示例。

标签: php jquery mysql ajax iframe


【解决方案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 查看更新
  • 我试过了,但我无法从第二个得到响应,直到第一个没有完成。这正是我的问题。
猜你喜欢
  • 1970-01-01
  • 2017-05-07
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多