在提交表單按鈕之前,我做了一個$ .getJSON調用來驗證一些數據,當它返回時,它會顯示一個「你沒有正確填寫這個表單」的對話框或者表單。提交()。但有時候,特別是在我的慢速測試服務器上,在回調被調用之前需要幾秒鐘,所以我想提出一些按下按鈕的可視指示(禁用按鈕,等待遊標等),以及然後關閉回調中的視覺指示。但我被告知,可能不會調用回調的機會很小但非零。如何防止getJSON未調用回調?
確保在這種情況下,我最終不會得到非功能性表單的最佳做法是什麼?
在提交表單按鈕之前,我做了一個$ .getJSON調用來驗證一些數據,當它返回時,它會顯示一個「你沒有正確填寫這個表單」的對話框或者表單。提交()。但有時候,特別是在我的慢速測試服務器上,在回調被調用之前需要幾秒鐘,所以我想提出一些按下按鈕的可視指示(禁用按鈕,等待遊標等),以及然後關閉回調中的視覺指示。但我被告知,可能不會調用回調的機會很小但非零。如何防止getJSON未調用回調?
確保在這種情況下,我最終不會得到非功能性表單的最佳做法是什麼?
除了.success
回調代替$.getJSON
之外,您還可以使用和.error
回調。如果請求失敗,.error
回調將觸發。您可以使用它重新啓用並顯示合適的消息,類似於投票失敗時在StackOverflow上顯示的消息。例如:
$.ajax({
url: "test.html",
dataType: "json",
success: function(html){
$form.submit();
},
error: function(xhr, error){
console.debug(xhr);
console.debug(error);
$form.find(":input").attr("disabled", false);
}
});
我推廣這種方法。還有一個可以爲請求設置的超時選項,這樣當它需要更長的時間然後x秒時,它會調用錯誤回調,這就是爲什麼上面的'setTimeout'方法是多餘的。 – mekwall 2011-05-24 14:58:01
您可以添加另一個涉及['.ajaxSetup'](http://api.jquery.com/jQuery.ajaxSetup/)和全局錯誤回調的解決方案。我會自己做,但我覺得這個答案已經足夠了,所以我不需要第三個答案來競爭*,也不想在未經您的同意的情況下編輯您的答案;) – mekwall 2011-05-24 15:00:56
@Marcus Ekwall - 做我的客人,編輯走了。真的不需要我的同意,但我很欣賞你的禮貌:) – karim79 2011-05-24 15:07:05
我只是使用超時。確保enableForm()僅在表單已啓用時返回,並在表單被禁用時清除超時以避免運行多個計時器。
setTimeout(enableForm,10000); //在10秒後啓用任何形式的表單
你可以看看這裏http://api.jquery.com/jQuery.getJSON/中的jqXHR對象部分,它解釋該函數$ .getJSON()返回一個實現的XMLHTTPRequest所以你將不得不使用.error,.success和.complete的jqXHR對象
我認爲這將工作你的情況:
$.getJSON("a.json", function() {}).error(function() {})
jQuery的哪個版本您使用的? – mekwall 2011-05-24 14:03:44
jQuery 1.4。 (大部分我們的一些頁面仍然使用1.3) – 2011-05-24 14:34:41