0

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

如果用户点击满意,请求似乎被覆盖......我不知道为什么。

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

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

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

有什么想法/建议吗?

  • 注意我使用的是本地变量而不是全局变量......已经想到了......
4

2 回答 2

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;
            }
        });
    }
}
于 2013-09-19T15:59:54.677 回答
0

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

如果您想允许多个请求,您需要实现一个队列,并串行进行 AJAX 调用。基本上,创建一个对象来保存 AJAX 函数队列。当一个请求返回时,调用下一个请求。这里有一些例子:

于 2013-09-19T20:52:28.933 回答