【问题标题】:Ajax Concurrent Call Running One after AnotherAjax 并发调用一个接一个地运行
【发布时间】:2016-08-04 14:26:03
【问题描述】:

我编写了一个简单的网页,希望能够在其中执行并发 ajax 请求。我知道我可以使用 .when() 在 jquery 中执行并发 ajax 请求,但这不完全是我的情况。我有如下功能:

 function getData(tt, tf) {
$.ajax({
    url : "/extpage.php",
    type : "POST",
    async: true, 
    data : {
        testt : tt,
        testf : tf
    }
})
.done(function (toolbox) {
    alert(data);
});

}

此函数是从网页内的按钮调用的,我需要能够让用户随时调用此函数(我知道浏览器可以支持的最大 ajax 请求数)而无需等待前一个ajax请求先完成,然后执行下一个。我希望每个呼叫都被并行处理。关于如何获得它的任何线索?

【问题讨论】:

标签: javascript jquery ajax


【解决方案1】:

这就是 AJAX 的工作原理。您执行的每个调用都独立于任何其他浏览器活动(通常包括其他 AJAX 调用)运行。

给定你的功能,如果我连续调用getData() 十次,它将发起十个独立的HTTP 请求。如果它们没有同时运行,则服务器可能一次不会响应多个请求,当然您对此无能为力。

【讨论】:

  • 您的意思是http服务器一次不响应多个请求?这绝对不是我的情况 :) 我看到有一些方法可以进行并发 ajax 调用......
  • 请记住以下几点:如果您调用 getData() 两次并且第一个请求未完成,您将不得不等到第一个调用完成...这是我的问题...而且我不会连续调用该函数两次或十次,我调用它一次,我等待 5 秒然后我再次调用等等......
  • 如果你调用getData()两次并且第一个请求没有完成,你绝对不用必须等待第一个调用完成.这根本不是 AJAX 的行为方式。第二个请求将立即启动,无论其他正在进行的 HTTP 请求正在做什么。
  • 是的,第二个请求是立即发起的,但只有在第一个请求完成后才会发送到服务器:)
【解决方案2】:

我认为您可能需要修改您的问题。

这个函数是从网页内的一个按钮调用的,我需要 可以让用户随时调用这个函数

这是默认的 AJAX 行为。 AJAX 调用是异步的。

async: true

是多余的,true 是异步的默认值。

如果您仍然遇到问题,问题可能出在其他地方,您的代码应该按照您在此问题中的要求执行。

最后一点:

$.when()

用于排队其他并发/异步任务,与您在 OP 中建议的相反。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多