0

我正在使用 jquery 倒数计时器插件(http://keith-wood.name/countdown.html)来显示时间。我正在调用一个函数来为回调事件“onTick”添加更多时间。当时间倒计时到 00:00:00 时,该函数将进行 ajax 调用以添加额外的时间。它工作正常,但每次计时器等于 00 时,ajax 都会进行多次调用(> 15)。我怎样才能让它只发送一个电话?我试过做 async: false 但它仍然在打多个电话。谢谢你。

$(this).countdown({ until: time, format: 'HMS', onTick: addExtraTime });

function addExtraTime() {      
 if ($.countdown.periodsToSeconds(periods) === 00) {
            var postValue = { ID: id }
            if (!ajaxLoading) {
                ajaxLoading = true;
                $.ajax({
                    url: "@Url.Action("AddExtraTime", "Home")",
                    type: 'post',
                dataType: 'json',
                contentType: "application/json",
                data: JSON.stringify(postValue),
                success: function() {
                    // show success
                },
                error: function(data) {
                    // show error
                }
            });
            ajaxLoading = false;
        }
      }
    }
4

2 回答 2

4

您有一个变量 ,ajaxLoading用于确定 Ajax 请求是否正在进行,但您将其设置为在调用后false 立即而不是在收到响应时。将其设置在您的成功和错误处理程序中。 $.ajax()false

于 2015-12-30T14:48:40.790 回答
2

ajaxLoading = false;即使ajax请求仍在完成,您也正在设置,请求完成后将其设置为false

        if (!ajaxLoading) {
            ajaxLoading = true;
            $.ajax({
                url: "@Url.Action("AddExtraTime", "Home")",
                type: 'post',
            dataType: 'json',
            contentType: "application/json",
            data: JSON.stringify(postValue),
            success: function() {
                // show success
            },
            error: function(data) {
                // show error
            }
            complete: function(){
                 ajaxLoading = false;
            }
        });
        //ajaxLoading = false;
    }
于 2015-12-30T14:50:38.407 回答