【发布时间】:2011-06-08 11:46:31
【问题描述】:
我遇到了 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,没有区别。
我希望在单击按钮时立即发送请求,而不是在上一个请求完成时发送。我希望请求同时运行,而不是在队列中。
【问题讨论】:
-
你能在这里发布你的javascript代码吗?默认情况下
$.ajax是异步的 -
@Emil,删除 Math.Random 等...并简单地使用
cache: false -
我认为 jquery 为每个调用使用一个新的异步连接。
-
@Jason,你还需要什么?这里的代码加上按钮上的绑定就是我得到的全部
-
@lonesomeday,为什么要指出一些完全不相关的东西?