Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jquery的多个ajax请求_Jquery_Ajax - Fatal编程技术网

使用jquery的多个ajax请求

使用jquery的多个ajax请求,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

我在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
这意味着请求排队,而不是同时运行,对吗?这不是与async相反吗?我还尝试在url中添加一个随机get参数,以强制请求具有某种唯一性,但没有成功

我确实读过一些关于这方面的文章。如果避免使用相同的“请求对象(?)”,则不会发生此问题。有可能在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函数为当前会话休眠。如果打开3个选项卡并放置ajax url,您将注意到相同的行为。5秒,10秒,然后15秒完成每个选项卡。我试着用谷歌搜索,发现其他人也有同样的结果。这可能是因为PHP不是真正的多线程。我建议使用不同的框架

据我所知,只有当您不在js的不同范围内时,才能执行并行ajax调用。似乎处于不同的js作用域中会使您以序列化方式使用相同的“请求对象”

因此,我们可以在Stack overflow上找到两个非常好的响应,在链接的页面上,看到第二个响应和一个并行查询堆栈对象,这是您需要的,在这个并行堆栈上添加您的请求,它们将真正被并行激发(Stack overflow是web中最好的站点:-))。
并发Ajax请求的数量有限制。看到这个了吗

看起来它依赖于浏览器


Bob

您不能同时执行此操作,因为JS由于一个浏览器UI线程而具有虚假的异步操作。但您可以尝试Web Workers,这是一种在浏览器UI线程之外执行代码的方法。他们已经支持Firefox3.5、Chrome3和Safari4。
也许它会提高应用程序的可用性

显然,通过使用session_write_close(),这种行为很容易通过;在PHP中。然而,这为DDos攻击提供了方便。我在10秒内按下F5刷新了一个页面,很快就关闭了我的开发人员计算机


案例结束。

你能在这里发布你的javascript代码吗。默认情况下,
$。ajax
是async@Emil,删除数学、随机等。。只需使用
cache:false
我以为jquery会为每个调用使用一个新的异步连接。@Jason,你还需要什么?这里的代码加上按钮上的绑定就是我的全部got@lonesomeday,为什么要指出一些完全不相关的事情呢?我用Firebug来记录时间。我觉得这很明显,这方面没有问题好的,我要测试一下,让你知道我想我发现了你的问题。阅读我的编辑。它与javascript无关,而是如何在php中处理session和sleep!另外,这可能有助于阅读第一条注释。如果您甚至不能同时启动两(2)个线程,则不依赖于浏览器。另一个线程中显示的代码是循环代码和循环中的ajax调用,对吗?我想对每个“并排”运行的事件进行一次ajax调用,而不会产生冲突第一个响应是循环,第二个示例提供了一个处理查询队列的对象,在您的情况下,使用该对象应该符合您的需要,您可能需要使用jQuery.data以独立于js作用域的方式存储查询队列。您仍然理解错误。我想做以下几件事。单击按钮A,发送一个需要5秒钟的ajax请求。在第一次单击后1秒,我单击按钮B并发送一个需要5秒的ajax请求。第二次单击后,我单击按钮C并发送一个ajax请求,需要5秒钟。这些在parralell中应该是有趣的,在A之后是B 1秒,在B之后是C 1秒。它们不会一次发送完。看这里:至少你有了ParallelAjaxExecuter作为你对象的基础。你需要在上面添加一些功能。他可以并行运行查询,第一点,然后您希望按照您要求的顺序获得结果,因此此对象也应该对结果进行排队,并在前一个结果完成时解锁它们(但您可能有一些相当复杂的代码来解释hanlde失败)。这里不是等待队列,而是工作队列,用于将某些任务交给ParallelAjaxExecutor,他不会等到请求结束时才获取工作队列中的下一项并运行它。队列用于将您的订单发送到一个外部对象,该对象在一个中心点处理ajax请求。Emil我花了很多时间为您找到了一个解决方案。但是你写了同样的答案,并认为它是正确的。你本可以信任一些社区成员