ajax用多个调用覆盖XHR对象--jQuery

时间:2013-09-19 15:19:59

标签: javascript jquery ajax

我有一个函数 someFunction(),它通过jQuery发送ajax requets。

如果用户点击满意,请求似乎被覆盖......我无法弄清楚原因。

var request = $.ajax(customObject);
request.done(doneFunction);
request.fail(failFunction);

传递给 doneFunction()的XHR对象&每次用户触发函数时, failFunction()都会被覆盖。

这是一个问题,因为 doneFunction()& failFunction()使用带有回调的延迟动画来在动画完成时更改html(从XHR对象派生)。

有任何想法/建议吗?

  • 注意我使用的是局部var而非全局变量...已经考虑过......

2 个答案:

答案 0 :(得分:0)

您可以添加一个变量来检查是否已经发送了请求,并阻止发送另一个请求,直到完成为止。像这样:

var requestSent = false;

function someFunction() {
    if (!requestSent) {
        requestSent = true;

        $.ajax({
            url: [url],
            type: [type],
            data: [data],
            success: function (xhr) {
                doneFunction(xhr);
                requestSent = false;
            },
            failure: function (xhr) {
                failFunction(xhr);
                requestSent = false;
            }
        });
    }
}

答案 1 :(得分:0)

一种简单的方法是隐藏或禁用按钮,直到ajax调用返回。在someFunction()中,您可以停用该按钮,并显示“加载”微调器图像,然后在successfailure回调中启用该按钮,然后删除“加载”微调器。

如果要允许多个请求,则需要实现队列,并按顺序进行AJAX调用。基本上,创建一个对象来保存AJAX函数的队列。当一个请求返回时,然后调用下一个请求。以下是一些例子: