Javascript如何检查是否正在进行呼叫,如果是,则将其终止

时间:2014-02-20 20:36:44

标签: javascript jquery

使用jQuery我正在用Javascript编写一个网站api调用,到目前为止效果非常好。当某人更新文本输入中的数字时,它会调用API并使用响应更新字段。然而,当我的用户快速做出很多改变时,它会出现问题。然后javascript似乎堆积了所有查询,并以某种方式将它们并排放置,这使得字段更新有点压力。

我认为给用户提供更宽松界面的一种方法是在用户完成编辑输入字段超过半秒之后才启动API调用。我当然可以设置超时,但是在超时后我需要检查是否还有正在进行的呼叫。如果存在,则需要停止/终止/忽略,然后只需启动新呼叫。

首先,这看起来像是一种合乎逻辑的做法吗?接下来,如何检查呼叫是否正在进行中?最后,如何停止/终止/忽略忙碌的呼叫?

欢迎所有提示!

[编辑] 根据要求,这里有一些我已经拥有的代码:

function updateSellAmount() {
    $("#sellAmount").addClass('loadgif');
    fieldToBeUpdated = 'sellAmount';
    var buyAmount = $("#buyAmount").val();
    var sellCurrency = $("#sellCurrency").val();
    var buyCurrency = $("#buyCurrency").val();

    var quoteURL = "/api/getQuote/?sellCurrency="+sellCurrency
        +"&buyAmount="+buyAmount
        +"&buyCurrency="+buyCurrency;

    $.get(quoteURL, function(data, textStatus, jqXHR){
        if (textStatus == "success") {
            $("#sellAmount").val(data);
            $("#sellAmount").removeClass('loadgif');
        }
    });
    if (fieldToBeUpdated == 'sellAmount') {
        setTimeout(updatesellAmount, 10000);
    }
}

$("#buyAmount").on("change keyup paste", function(){
    updateSellAmount();
});

1 个答案:

答案 0 :(得分:1)

如果您按照以下方式进行AJAX调用:

var myAjaxDeferred = $.ajax("....");

您可以稍后通过以下方式查看:

if (myAjaxDeferred.state() === "pending") {
    // this call is still working...
}