jQuery Ajax SyncLock

时间:2010-01-28 01:14:15

标签: jquery ajax synclock

我有几个按钮,用户可以点击以使用jQuery的$ .ajax加载内容。所有按钮都将内容加载到相同的div标签中。问题是,如果用户快速点击多次,内容可能会在登陆正确的内容之前闪烁几次。

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

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

2 个答案:

答案 0 :(得分: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...
    }
});

答案 1 :(得分:0)

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