AJAX中同步和異步的區別和使用場景


一、簡介
Ajax請求最重要的問題是代碼執行的順序。最長遇到的問題是,我們定義一個變量接收ajax異步請求的返回結果,后續代碼使用,然而后續代碼在使用時該變量為初始值,始終得不到想要的結果!!!
二、示例
// 異步
var email = "test@ptmind.com";
console.log(1);
jQuery.ajax({
url: "/invite/sendEmailAjax.pt",
type: "post",
dataType: "text",
async: true,
data: "inviteEmails="+email,
success: function(data){
console.log(2);
}
});
console.log(3);
// 結果:1->3->2

// 同步
var email = "test@ptmind.com";
console.log(1);
jQuery.ajax({
url: "/invite/sendEmailAjax.pt",
type: "post",
dataType: "text",
async: false,
data: "inviteEmails="+email,
success: function(data){
console.log(2);
}
});
console.log(3);
// 結果:1->2->3
三、官方解釋
By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false.Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active.

sync默認是true,即為異步方式,$.ajax執行后,會繼續執行ajax后面的腳本,直到服務器端返回數據后,觸發$.ajax里的success方法。若要將其設置為false,則所有的請求均為同步請求,在沒有返回值之前,同步請求將鎖住瀏覽器,用戶其它操作必須等待請求完成才可以執行。http://api.jquery.com/jQuery.ajax/
---------------------
作者:奮飛
來源:CSDN
原文:https://blog.csdn.net/ligang2585116/article/details/45484619
版權聲明:本文為博主原創文章,轉載請附上博文鏈接! 

 AJAX中根據async的值不同分為同步(async = false)和異步(async = true)兩種執行方式;在W3C的教程中推薦使用異步執行;

下面來區別一下同步和異步有什么不同:

異步:在異步模式下,當我們使用AJAX發送完請求后,可能還有代碼需要執行。這個時候可能由於種種原因導致服務器還沒有響應我們的請求,但是因為我們采用了異步執行方式,所有包含AJAX請求代碼的函數中的剩余代碼將繼續執行。如果我們是將請求結果交由另外一個JS函數去處理的,那么,這個時候就好比兩條線程同時執行一樣。

同步:在同步模式下,當我們使用AJAX發送完請求后,后續還有代碼需要執行,我們同樣將服務器響應交由另一個JS函數去處理,但是這時的代碼執行情況是:在服務器沒有響應或者處理響應結果的JS函數還沒有處理完成return時,包含請求代碼的函數的剩余代碼是不能夠執行的。就好比單線程一樣,請求發出后就進入阻塞狀態,知道接觸阻塞余下的代碼才會繼續執行。 

如何選擇同步還是異步模式?要回答這一問題,我們可以通過下面可能出現的問題來回答:

我們在發送AJAX請求后,還需要繼續處理服務器的響應結果,如果這時我們使用異步請求模式同時未將結果的處理交由另一個JS函數進行處理。這時就有可能發生這種情況:異步請求的響應還沒有到達,函數已經執行完了return語句了,這時將導致return的結果為空字符串。
---------------------
作者:SerenoShen
來源:CSDN
原文:https://blog.csdn.net/shenlei19911210/article/details/41964313


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM