2014-02-20 36 views
-1

使用jQuery我正在用Javascript編寫一個網站API調用,目前效果很好。當一個人更新文本輸入中的數字時,它會調用API並用響應更新字段。但是,當用戶快速進行大量更改時,它會產生問題。 JavaScript似乎堆積了所有查詢,並且以某種方式並排執行它們,這使得該字段被更新爲一種壓力感的外觀。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(); 
}); 
+0

顯示一些代碼。一般來說,假設你使用的是'.ajax',那麼從它返回的延遲對象可以存儲在一個變量中,以便稍後檢查它(使用'.state()')來查看它是否已解析和/或以後鏈接呼籲,以便他們保持秩序。 –

+1

可能的重複[如何知道jQuery是否有待處理的Ajax請求?](http://stackoverflow.com/questions/1822913/how-do-i-know-if-jquery-has-an-ajax-request -depending) –

+0

@PatrickQ - 問題在於你提到的問題有一個選項來檢查是否有任何請求正在等待處理,但沒有解決如何停止或忽略該待處理請求並將其替換爲新請求。 – kramer65

回答

1

如果你讓你的AJAX調用是這樣的:

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

您可以在以後檢查:

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

感謝您的提示!但是,我將如何停止/殺死/忽視它,以便它不再更新文本字段? – kramer65

+0

@ kramer65:在您的回調中,您可以添加檢查以查看返回的數據是否仍然相關。 –

+0

知道它是否仍然相關的唯一方法是檢查請求是否在請求完成後發出。我是否需要開始創建時間戳列表或其他內容?這似乎不是顯而易見的選擇。 – kramer65

相關問題