我遇到了 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/