這次的教學是在AJAX中,非同步同步的請求怎麼實現,我們知道,FormData類型、事件監聽介面都是需要AJAX來實現的,那麼有沒有辦法在頁面資料變動時,只向伺服器請求新的數據,並且在阻止頁面刷新的情況下,動態替換頁面中展示的數據呢?今天就來談談AJAX這個概念。
XMLHttpRequest 物件
XMLHttpRequest只是一個JavaScript物件,確切的說,是一個建構子。換句話說,它一點也不神秘,它的特殊之處只在於它是由客戶端(即瀏覽器)提供的(而不是JavaScript原生的),除此之外,它有屬性,有方法,需要透過new關鍵字進行實例化,我們只需掌握它們就好;
XMLHttpRequest 之獲取數據
我們知道AJAX用來在項目中以阻止頁面刷新的方式獲取數據,那麼數據從哪裡來呢?我們又怎麼知道如何取得這些數據?答案是我們通常會使用API與各式各樣的資料庫互動。
「API」是「Application Programming Interface」(即:應用程式介面)的縮寫,你可以想像一些資料是開放的並且在等待被使用,而我們獲取這些資料的方式便是使用API 。 API通常的形式是一個URL,並提供指定的參數名稱和參數值用來幫助你定位要取得的資料。
XMLHttpRequest 之 準備請求
要想與伺服器交互,首先需要思考以下問題:
我們是要取得資料還是儲存資料? —— 表現為請求方式是「GET」還是「POST」 向哪裡發出請求? —— 即對應的API位址 以何種方式等待對應? —— 有「同步」和「非同步」兩種選擇
而XMLHttpRequest實例的.open()方法的作用就是用來回答以上三個問題。 .open()方法接收三個參數:請求方式,請求URL位址和是否為非同步請求的布林值。
下面是一個.open()方法呼叫的範例:
// 該段程式碼會啟動一個針對「example.php」的GET同步請求。
xhr.open("get", "example.php", false)
// 「DELETE」、「HEAD」、「OPTONS」、「PUT」也可以作為open( )方法的第1個參數。
上面的程式碼中,透過傳遞第三個參數為false實現同步。要注意的是:一旦設定為同步,那麼send()方法就會阻塞直到請求完成。
(三)同步請求與非同步請求
人們通常認為AJAX是異步的,實際上並非如此,AJAX是避免頁面在獲取資料後刷新的一種技術,至於等待伺服器回應的方式是同步還是非同步,需要開發人員結合業務需求進行配置(雖然通常是非同步的)。
你可能會好奇,什麼時候我們需要使用同步的AJAX?就我個人經驗而言,似乎很難找到相應的場景。
最後我們再簡單解釋一下「同步」等待回應與「非同步」等待回應的差異:「同步」表示一旦要求發出,任何後續的JavaScript程式碼不會再執行,「非同步」則是當請求發出後,後續的JavaScript程式碼會繼續執行,當請求成功後,會呼叫對應的回呼函數。
XMLHttpRequest 2級之FormData類型
W3C提出了XMLHttpRequest 2級規範,雖然並非所有的瀏覽器都實現了該規範所規定的內容,但還是有一些內容被全部或大多數瀏覽器所實作。
FormData 類型
FormData是XMLHttpRequest 2級為我們提供的新的資料型別(建構子),還記的如何偽裝一個POST請求為一個表單提交嗎? FormData讓這個過程變得更加輕鬆,因為XHR2物件能夠識別傳入的資料類型是FormData的實例,並自動配置適當的頭部資訊。
如何偽裝一個POST請求為一個表單提交?
當使用POST方法提交這種順序的表單資料時,必須設定「Content-Type」請求頭為這個值。
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
注意:當使用form時,這不是必要值,因為這是預設方法。
FormData的使用方式如下:
// 添加数据 let data1 = new FormData() data1.append("name", "Tom") xhr.send(data1) // 提取表单数据 let data2 = new FormData(document.forms[0]) xhr.send(data2)
除此之外,FormData的另一個好處是相較於傳統的AJAX請求,它允許我們上傳二進制資料(圖片,視頻,音頻等)。
FormData的瀏覽器相容性。
桌面端IE 10+ 與其他瀏覽器均支援
行動端Android,Firefox Mobile,OperaMobile皆支援,其餘瀏覽器未知
XMLHttpRequest 2級之事件監聽接口
XMLHttpRequest第一版,只能對onreadystatechange這一事件指定回呼函數。該事件對所有情況作出回應。
XMLHttpRequest第二版允許對更多的事件指定回呼函數。
onloadstart 請求發出
onprogress 正在傳送和載入資料
onabort 請求被中止,例如使用者呼叫了
##onload 請求成功完成 ontimeout 請求成功完成 ontimeout 使用者指定的時限到期,請求尚未完成 onloadend # 請求完成,無論結果或失敗onloadend #
相信看了這些案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
相關閱讀:
前端的js框架總結以及用途講解怎麼解決ajax在解析json資料時單位秒的形式h5裡js和servlet實作檔案上傳的實作步驟以上是AJAX使用中的非同步同步請求怎麼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver CS6
視覺化網頁開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能