我遇到了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,没有区别.
我希望在单击按钮时立即发送请求,而不是在上一个请求完成时发送.我希望请求同时运行,而不是在队列中运行.
好的,我会尝试,我认为你需要一个更好的方式来记录时间.我不确定你现在在做什么来测试时间,但这是一个好方法.
如果您还没有Firefox,请获取Firebug.
打开Firebug并转到网络选项卡.确保启用它.
当您单击每个按钮时,您应该看到每个请求都进入.如果您单击每个按钮,您看不到下一个请求开始,直到上一个请求结束,然后这告诉我javascript中有问题.但是,我猜你应该把每个酒吧的开头分开1秒.这样做,让我们知道你看到了什么.
编辑
我想我发现你有问题.我猜你在php中使用睡眠功能.睡眠功能为当前会话休眠.如果你打开3个标签,并放入ajax网址,你会发现同样的行为.5,10,然后15s为每个标签完成.我尝试谷歌搜索,并发现与其他人相同的结果.这可能是因为PHP并不是真正的多线程.我建议使用不同的框架.