jquery - 使用 jquery 进行多个 ajax 请求

标签 jquery ajax

我遇到了 Javascript/JQuery 异步特性的问题。

让我们说以下内容(不计算延迟,以免变得如此麻烦);

我在页面上有三个按钮(A、B、C),每个按钮都将一个项目添加到购物车中,每个按钮都有一个 ajax 请求。 如果我在服务器端脚本 (PHP) 中故意延迟 5 秒,并间隔 1 秒按下按钮,我希望结果如下:

Request A, 5 seconds
Request B, 6 seconds
Request C, 7 seconds

然而结果是这样的

Request A, 5 seconds
Request B, 10 seconds
Request C, 15 seconds

这意味着请求已排队并且不同时运行,对吧?这不是和异步相反吗?我还尝试向 url 添加随机获取参数,以强制请求具有一定的唯一性,但没有成功。

我确实读过一些相关内容。如果避免使用相同的“请求对象(?)”,则不会出现此问题。是否可以在 JQuery 中强制执行此行为?

这是我正在使用的代码

 $.ajax(
 {
  url   : strAjaxUrl + '?random=' + Math.floor(Math.random()*9999999999),
  data  : 'ajax=add-to-cart&product=' + product,
  type  : 'GET',
  success  : function(responseData)
  {
   // update ui
  },
  error  : function(responseData)
  {
   // show error
  }
 });

我也尝试了GET和POST,没有区别。

我希望在单击按钮时立即发送请求,而不是在完成上一个请求时发送请求。我希望请求同时运行,而不是在队列中运行。

最佳答案

好吧,这就是我要尝试的,我认为您需要一种更好的方法来记录时间。我不确定你现在正在做什么来测试时间,但这是一个好方法。

如果您还没有下载适用于 Firefox 的 Firebug,请下载它。

打开 Firebug 并转到网络选项卡。确保启用它。

当你点击每个按钮时,你应该看到每个请求进来。如果你点击每个按钮,你不会看到下一个请求开始,直到上一个请求结束,然后这告诉我 JavaScript 中有问题。不过,我猜你应该将每个小节的开头间隔 1 秒。这样做并让我们知道您看到了什么。

编辑

我想我发现了你的问题。我猜你正在使用 php 中的 sleep 函数。 sleep 函数在当前 session 期间休眠。如果您打开 3 个选项卡,并输入 ajax url,您会注意到相同的行为。每个选项卡需要 5 秒、10 秒、然后 15 秒才能完成。我尝试谷歌搜索并发现与其他人相同的结果。这可能是因为 PHP 并不是真正的多线程。我建议使用不同的框架。

关于jquery - 使用 jquery 进行多个 ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4680232/

相关文章:

javascript - 无法根据文本选择 <a>,然后使用 jQuery 添加名为 "target"的属性

javascript - 互联网浏览器 11 : MouseUp triggered on Scrollbar-MouseDown

ajax - 使用 Proc 返回默认布局行为

javascript - jQuery 获取 HTTP URL 请求

ajax - <a4j :commandLink> Not Rerendering

javascript - ajax 调用之间的值不会改变

php - MySQL数据库中的错误编码能否破坏AJAX请求(用PHP编写)?

jQuery:如果是 XYZ,则将类添加到此元素和下一个元素

javascript - 当导航栏固定到屏幕顶部时停止从 'jumping' 开始的内容

javascript - 切换jquery没有逆转