如果在jQuery中多次单击,则排队功能

时间:2012-09-13 05:33:34

标签: jquery ajax shopping-cart

我正在创建一个按钮,在点击时提交AJAX请求以更新购物车。

问题是,如果用户快速连续多次点击,脚本将无法更新它(例如,在2秒内点击10次,只添加了两次)。

我想知道是否还有排队ajax请求?

2 个答案:

答案 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);
    }
}

这保证您在每个请求完成后按顺序执行请求并一个接一个地执行。