簡體   English   中英

JavaScript:沒有警報()的功能不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM