2011-05-24 88 views
2

在提交表單按鈕之前,我做了一個$ .getJSON調用來驗證一些數據,當它返回時,它會顯示一個「你沒有正確填寫這個表單」的對話框或者表單。提交()。但有時候,特別是在我的慢速測試服務器上,在回調被調用之前需要幾秒鐘,所以我想提出一些按下按鈕的可視指示(禁用按鈕,等待遊標等),以及然後關閉回調中的視覺指示。但我被告知,可能不會調用回調的機會很小但非零。如何防止getJSON未調用回調?

確保在這種情況下,我最終不會得到非功能性表單的最佳做法是什麼?

+0

jQuery的哪個版本您使用的? – mekwall 2011-05-24 14:03:44

+0

jQuery 1.4。 (大部分我們的一些頁面仍然使用1.3) – 2011-05-24 14:34:41

回答

4

除了.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); 
    } 
}); 
+0

我推廣這種方法。還有一個可以爲請求設置的超時選項,這樣當它需要更長的時間然後x秒時,它會調用錯誤回調,這就是爲什麼上面的'setTimeout'方法是多餘的。 – mekwall 2011-05-24 14:58:01

+1

您可以添加另一個涉及['.ajaxSetup'](http://api.jquery.com/jQuery.ajaxSetup/)和全局錯誤回調的解決方案。我會自己做,但我覺得這個答案已經足夠了,所以我不需要第三個答案來競爭*,也不想在未經您的同意的情況下編輯您的答案;) – mekwall 2011-05-24 15:00:56

+0

@Marcus Ekwall - 做我的客人,編輯走了。真的不需要我的同意,但我很欣賞你的禮貌:) – karim79 2011-05-24 15:07:05

4

我只是使用超時。確保enableForm()僅在表單已啓用時返回,並在表單被禁用時清除超時以避免運行多個計時器。

setTimeout(enableForm,10000); //在10秒後啓用任何形式的表單

2

你可以看看這裏http://api.jquery.com/jQuery.getJSON/中的jqXHR對象部分,它解釋該函數$ .getJSON()返回一個實現的XMLHTTPRequest所以你將不得不使用.error,.success和.complete的jqXHR對象

我認爲這將工作你的情況:

$.getJSON("a.json", function() {}).error(function() {}) 
+0

原則上,與我發佈的相同,但更簡潔和*更新*。 +1 – karim79 2011-05-24 14:11:50

+0

雖然這是jQuery 1.5,不是嗎? – 2011-05-24 14:55:59

+0

不幸的是,他使用1.5之前的版本,所以這對他不起作用。 – mekwall 2011-05-24 14:56:26