2

我有几个按钮,用户可以单击它们来使用 jQuery 的 $.ajax 加载内容。所有按钮都将内容加载到同一个 div 标签中。问题是,如果用户快速点击多次,内容可能会闪现几次,然后才能登陆正确的内容。

我有什么解决方法?我正在考虑类似于.net 的 SyncLock 功能,但在 javascript/jQuery 中。理想的解决方案是取消当前在队列中的请求并启动新的请求。

需要注意的一件事是,可能有多个不相关的 ajax 请求正在进行,所以我无法清除所有请求,只清除与这个 div 标签相关的请求。

4

2 回答 2

6

清除/取消请求是一项昂贵的任务,因此如果您真的需要它,请不要这样做。它也不会停止服务器端的执行,只需关闭 httprequest。

您应该做的是设置“锁定”并相应地锁定和解锁。就像是:

var working = false;

function startAjax() {
    working = true;
    // do ajax and wait for callback()
}

function callback() {
    working = false;
}

在按钮 .click() 确保您在实际执行之前检查是否工作:

$("#thebutton1, #thebutton2").click(function() {
    if(working) {
        alert("Im in the middle of something");
    } else {
        // execute...
    }
});
于 2010-01-28T01:18:24.993 回答
0

您可以做的是让将输出发送到同一 div 的所有按钮的单击事件禁用该按钮。然后在 AJAX 回调中,一旦您处理了响应,您就可以重新启用它们。

于 2010-01-28T01:19:32.690 回答