使用jquery的多个ajax请求

Emi*_*mil 10 ajax jquery

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

让我们说以下(没有延迟计算,为了不使它如此麻烦);

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

Request A, 5 seconds
Request B, 6 seconds
Request C, 7 seconds
Run Code Online (Sandbox Code Playgroud)

但是,结果是这样的

Request A, 5 seconds
Request B, 10 seconds
Request C, 15 seconds
Run Code Online (Sandbox Code Playgroud)

这必须意味着请求排队而不是同时运行,对吧?这与异步是否相反?我还尝试在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
  }
 });
Run Code Online (Sandbox Code Playgroud)

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

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

Ami*_*far 8

好的,我会尝试,我认为你需要一个更好的方式来记录时间.我不确定你现在在做什么来测试时间,但这是一个好方法.

如果您还没有Firefox,请获取Firebug.

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

当您单击每个按钮时,您应该看到每个请求都进入.如果您单击每个按钮,您看不到下一个请求开始,直到上一个请求结束,然后这告诉我javascript中有问题.但是,我猜你应该把每个酒吧的开头分开1秒.这样做,让我们知道你看到了什么.

编辑

我想我发现你有问题.我猜你在php中使用睡眠功能.睡眠功能为当前会话休眠.如果你打开3个标签,并放入ajax网址,你会发现同样的行为.5,10,然后15s为每个标签完成.我尝试谷歌搜索,并发现与其他人相同的结果.这可能是因为PHP并不是真正的多线程.我建议使用不同的框架.

  • 这也可以帮助http://php.net/manual/en/function.session-write-close.php阅读第一条评论. (2认同)