[英]JavaScript: function not working without alert()
各位程序員,大家好!
我寫信給您是為了請求幫助解決我最近遇到的一個問題。 問題如下:
1) 我有一個 ajax 請求,用 jQuery 實現。
2) 返回成功響應后,腳本應重新加載具有相應更改的頁面,如果有任何驗證錯誤,則將它們插入到隱藏字段之后,用於存儲非關鍵的雜項數據。 如果存在任何驗證錯誤,則不會保存更改,而只會使用驗證錯誤消息重新加載頁面。 驗證本身由 servlet 負責。
3)我注意到一切正常,當在實際附加錯誤消息之前出現任何類型的 alert() 時,但我不想有這樣的警報。
這是 JavaScript 代碼:
$('#randomFormElement').submit(function() {
$(this).ajaxSubmit({
success: function (data, status) {
randomFunctionToReloadThePage(arg1, arg2, arg3);
var errors = $(data).find('.classNameOfTheErrors').xml();
//alert(something);
$(errors).insertAfter('#idOfTheHiddenField');
},
error: function (jqXHR, textStatus, thrownError) {
//Error handling if the ajax response fails.
}
});
});
所以,主要的問題是:alert() 是怎么工作的?
==========================
在 Chrome 上,這兩種方式都不起作用。
在 FF 上,它僅在存在某些 alert() 時才起作用。
提前致謝!
alert()
函數會阻止代碼執行並延遲其底部的 javascript 代碼的處理。 這可以給 ajax 請求時間來完成。
這不是答案,而是調試技巧(無法在注釋中進行正確的代碼格式化)。
在alert()
之后添加這兩個調用:
console.log( "errors:", errors );
console.log( "hidden:", $('#idOfTheHiddenField')[0] );
將警報注釋掉並運行它。 它在開發者控制台中顯示什么?
然后為了比較,取消警報的注釋,使其在這兩個調用之前運行,並在 Firefox 中運行它。 現在控制台里有什么?
感謝大家的回答,特別是 gvee 的回答,我設法讓它發揮作用。 顯然,在 randomFunctionToReloadThePage() 中確實發生了一些異步事件,我設法使用.ajaxStop() 方法修復了它。
編輯:在使用 ajaxStop() 時發現了第二個錯誤。 我發現正常工作的解決方案如下:
1) 給 randomFunctionToReloadThePage 添加一個額外的參數
2) 在相應頁面中使用該額外參數調用該函數。
嘗試添加:緩存:假
$('#randomFormElement').submit(function() {
$(this).ajaxSubmit({
cache: false,
success: function (data, status) {
randomFunctionToReloadThePage(arg1, arg2, arg3);
var errors = $(data).find('.classNameOfTheErrors').xml();
//alert(something);
$(errors).insertAfter('#idOfTheHiddenField');
},
error: function (jqXHR, textStatus, thrownError) {
//Error handling if the ajax response fails.
}
});
});
它也發生在我身上。 我們的代碼中不能有警報。 Settimeout
功能解決了我的問題。 用"setTimeOut"
函數替換“alert”並在其中添加其余代碼。
setTimeout(function(){ //your code here }, 300);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.