2015-02-23 75 views
4

在我的JS應用程序中,我有許多使用async: false的Ajax調用。我正在使用最新的Chrome瀏覽器,並且在我的控制檯中最近出現警告。jQuery ajax async:false會導致一個奇怪的警告?

同步XMLHttpRequest的主線程已被棄用,因爲 其所帶來的影響最終用戶的體驗。如需更多幫助,請致電 查詢http://xhr.spec.whatwg.org/

現在我試圖將所有async: false更改爲async: true。但它會導致很多錯誤,因爲我的應用需要使用async: false運行。

警告只是一個錯誤或什麼?我可以擔心或忽略這一點嗎?

+1

這不是一個錯誤。這是一條信息性消息,告訴你同步XMLHTTPRequests已被棄用(即不應該再使用)以及爲什麼。你應該轉換你的應用程序,以便它可以與異步請求一起工作(是的,它不像將'false'更改爲'true'那麼簡單)。我不明白你期望什麼樣的答案? – 2015-02-23 18:39:19

+0

在警告 – charlietfl 2015-02-23 18:39:22

回答

2

警告只是一個錯誤或什麼?

不,這不是一個錯誤。出於消息中陳述的原因,同步請求確實被棄用。

我可以擔心或忽略嗎?

你應該聽取意見和對您的應用進行相應的變化(是的,它不是隻是改變async: falseasync: true一樣簡單)。

這也許有助於理解異步操作更好:

1

它告訴你,如果服務器出現故障,你將冒着鎖定瀏覽器的風險。

用取消按鈕建立模式對話框並異步調用該函數。

3

此消息告訴你async: false創建了一個不好的用戶體驗。這是因爲它在ajax調用期間鎖定了瀏覽器。這不是一個錯誤,而是一條勸告信息,說明你正在做的事情你應該不會做。

我很少看到async: false的合法需求,但使用async: true編程(以創建更好的用戶體驗)需要編寫可用於異步操作的代碼。這是你必須學會​​如何去做的事情,但是一旦學會就很容易做到。

您不能只是簡單地將寫入的代碼同步運行,並將標誌更改爲異步並期望同步代碼正常工作。相反,您必須更改代碼以處理異步響應,並且您經常必須重構某些使用響應的代碼以使其位於異步響應處理程序中。

如果您想了解如何開始使用AJAX的異步編碼,那麼我建議你閱讀了這個問題,它的各種答案:How do I return the response from an asynchronous call?

4

JavaScript的專門UI線程上運行,以便同步AJAX調用會凍結完全的瀏覽器,直到服務器回覆。

在用戶體驗設計中,Web應用程序被認爲是一個糟糕的實踐,主流瀏覽器不贊成使用回調的異步請求。

您現在可能不擔心該信息。這不是一個錯誤,但我強烈建議你開始重寫它,因爲當一個功能被標記爲不推薦使用時,意味着他們可以在將來隨時刪除該功能。

它也從jQuery的1.8+

在jQuery 1.8中棄用,採用異步的:與jqXHR($ .Deferred)假是 過時;您必須使用成功/錯誤/完整的呼選項 代替jqXHR對象的相應方法,如 jqXHR.done()或棄用jqXHR.success()

的recomended方式:

var request = $.ajax({ 
    url: "script.php", 
    data: { id : menuId }, 
    dataType: "application/json" 
}); 

request.done(function(data) { 
    // Executed in case of success 
}); 

request.fail(function(jqXHR, textStatus) { 
    // Executed in case of error 
}); 
+1

中引用的原因一直是使用'async:false'的錯誤做法在我的情況下,我必須使用'async:false'。否則,腳本將執行後續代碼,而不會等待檢查打印機中是否有未決打印作業的任務。我必須等待請求完成。我希望有一種方法可以做到這一點,同時避免棄用警告。 – 2017-09-28 17:36:55

2

警告只是一個錯誤或什麼?

警告本身不是一個錯誤。它警告你,你的代碼中可能存在錯誤。您的代碼使用的功能已被棄用,這意味着有一個越來越小的保證,它會按照您的預期工作。警告很簡單,就是警告你。

我可以擔心或忽略嗎?

忽略警告通常是一個壞主意。當他們最終成爲錯誤時,你只能責怪自己的宕機時間。

但它會導致很多錯誤的,因爲我的應用程序需要與async: false

跑你這裏混淆的原因/效應關係。 async: true不會導致錯誤,代碼是。應該糾正這些錯誤,而不是規避。通過使用async: false來避免這些錯誤只是推遲修復它們,直到稍後。此警告告訴您「稍後」正在接近,並建議您在問題變得更糟之前解決問題。

如果您的應用程序「需要與async: false一起運行」,那麼您的應用程序設計不正確。警告提示您修復它。所有人都在這裏。