我正在使用jQuery警報對話框插件(http://abeautifulsite.net/,版本1.1)和jQuery v1.6.1。測試IE 11和Chrome 41.0.x版本。有一個測試代碼:jAlert不顯示與jQuery ajax同步
var t = (new Date()).getTime();
jAlert('Test message');
console.log('Alert displayed, d=' + ((new Date()).getTime() - t));
console.log(' Alert visible: ' + $('#popup_panel').is(":visible") + ', Overlay visible: ' + $('#popup_overlay').is(":visible") + ', d=' + ((new Date()).getTime() - t));
$.ajax({
url: 'http://ip.jsontest.com/',
data: { },
type: 'GET',
async: false,
complete: function() {
console.log('Ajax complete, d=' + ((new Date()).getTime() - t));
$.alerts._hide();
console.log(' Alert visible: ' + $('#popup_panel').is(":visible") + ', Overlay visible: ' + $('#popup_overlay').is(":visible") + ', d=' + ((new Date()).getTime() - t));
}
});
和控制檯輸出:
Alert displayed, d=8
Alert visible: true, Overlay visible: true, d=9
Ajax complete, d=276
Alert visible: false, Overlay visible: false, d=281
我的問題是,當我設置$就異步假警報框將不顯示。一切工作正常當異步設置爲true。我知道什麼是異步:錯誤的意思。我用它來填寫數據。當數據提交正在進行中時,我想要顯示和警告框,例如「正在進行操作...」並阻止任何用戶輸入(鼠標點擊,鍵盤Enter鍵等)。在我的應用程序的某些地方,這在其他作品中不起作用,我不知道爲什麼。 有沒有什麼方法可以確保在真正的Ajax調用之前進行UI更改?
好點。我懷疑這一點。 setTimeout似乎不是非常可靠的解決方案。我認爲實際的超時取決於瀏覽器的性能,有時可能太小。我想我會使用異步ajax調用,並使用一些標誌,數據提交正在進行中,任何重複的提交應該被忽略。 – Marius
@Marius最好的解決方案是像你說的那樣使用async ajax調用。 – semirturgay