我正在创建一个按钮,在点击时提交AJAX请求以更新购物车。
问题是,如果用户快速连续多次点击,脚本将无法更新它(例如,在2秒内点击10次,只添加了两次)。
我想知道是否还有排队ajax请求?
答案 0 :(得分:5)
是的,你可以排队ajax请求,但我更喜欢在请求完成之前禁用该按钮。
浏览器会自动排队ajax请求,但不保证订单,只是最终会执行。
如果你需要它们按顺序运行我通过google找到了http://code.google.com/p/jquery-ajaxq/这是一个插件,它为ajax请求添加了一个队列,并确保它们按顺序运行,并且一次不会超过一个。
对于禁用按钮,请确保为ajax请求添加超时,如果请求超时,则重新启用该按钮。
答案 1 :(得分:0)
您可以通过以下方式实现简单队列:
var lock = false, queue = [];
$('#submitButton').click(function (event) {
var data = ExtractRequestData(); // This function is what you do to get the data you want to send
PerformRequest(data);
});
function PerformRequest(data) {
if (!lock) {
lock = true;
$.ajax(// perform ajax request
complete: function (data) {
// Complete handler
lock = false;
if (queue.length > 0) {
PerformRequest(queue.shift());
}
}
} else {
qeueu.push(data);
}
}
这保证您在每个请求完成后按顺序执行请求并一个接一个地执行。