AJAX使用中的非同步同步請求怎麼實現
這次的教學是在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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

當您在您的同步資料夾中發現一個或多個項目與Outlook中的錯誤訊息不符時,這可能是因為您更新或取消了會議項目。在這種情況下,您會看到一條錯誤訊息,提示您的本機資料版本與遠端副本有衝突。這種情況通常發生在Outlook桌面應用程式中。您同步的資料夾中的一個或多個項目不符。若要解決衝突,請開啟這些項目,然後重試此操作。修復同步的資料夾中的一個或多個項目不符合Outlook錯誤在Outlook桌面版中,當本機行事曆項目與伺服器副本發生衝突時,可能會遇到問題。不過,幸運的是,有一些簡單的方法可以幫助您

標題:解決jQueryAJAX請求出現403錯誤的方法及程式碼範例403錯誤是指伺服器禁止存取資源的請求,通常會導致出現這個錯誤的原因是請求缺少權限或被伺服器拒絕。在進行jQueryAJAX請求時,有時會遇到這種情況,本文將介紹如何解決這個問題,並提供程式碼範例。解決方法:檢查權限:首先要確保請求的URL位址是正確的,同時驗證是否有足夠的權限來存取該資

使用PHP和Ajax建置自動完成建議引擎:伺服器端腳本:處理Ajax請求並傳回建議(autocomplete.php)。客戶端腳本:發送Ajax請求並顯示建議(autocomplete.js)。實戰案例:在HTML頁面中包含腳本並指定search-input元素識別碼。

jQuery是一個受歡迎的JavaScript函式庫,用來簡化客戶端端的開發。而AJAX則是在不重新載入整個網頁的情況下,透過發送非同步請求和與伺服器互動的技術。然而在使用jQuery進行AJAX請求時,有時會遇到403錯誤。 403錯誤通常是伺服器禁止存取的錯誤,可能是由於安全性原則或權限問題導致的。在本文中,我們將討論如何解決jQueryAJAX請求遭遇403錯誤

如何解決jQueryAJAX報錯403的問題?在開發網頁應用程式時,經常會使用jQuery來發送非同步請求。然而,有時在使用jQueryAJAX時可能會遇到錯誤代碼403,表示伺服器禁止存取。這種情況通常是由伺服器端的安全性設定所導致的,但可以透過一些方法來解決這個問題。本文將介紹如何解決jQueryAJAX報錯403的問題,並提供具體的程式碼範例。一、使

使用Ajax從PHP方法取得變數是Web開發中常見的場景,透過Ajax可以實作頁面無需刷新即可動態取得資料。在本文中,將介紹如何使用Ajax從PHP方法中取得變量,並提供具體的程式碼範例。首先,我們需要寫一個PHP檔案來處理Ajax請求,並傳回所需的變數。下面是一個簡單的PHP檔案getData.php的範例程式碼:

並發和非同步編程並發編程處理同時執行的多個任務,非同步編程是一種並發編程,其中任務不會阻塞線程。 asyncio是python中用於非同步程式設計的函式庫,它允許程式在不阻塞主執行緒的情況下執行I/O操作。事件循環asyncio的核心是事件循環,它監控I/O事件並調度相應的任務。當一個協程準備好時,事件循環會執行它,直到它等待I/O操作。然後,它會暫停協程並繼續執行其他協程。協程協程是可暫停和恢復執行的函數。 asyncdef關鍵字用於建立協程。協程使用await關鍵字等待I/O作業完成。 asyncio的基礎以下

Ajax(非同步JavaScript和XML)允許在不重新載入頁面情況下新增動態內容。使用PHP和Ajax,您可以動態載入產品清單:HTML建立一個帶有容器元素的頁面,Ajax請求載入資料後將資料加入到該元素中。 JavaScript使用Ajax透過XMLHttpRequest向伺服器傳送請求,從伺服器取得JSON格式的產品資料。 PHP使用MySQL從資料庫查詢產品數據,並將其編碼為JSON格式。 JavaScript解析JSON數據,並將其顯示在頁面容器中。點選按鈕觸發Ajax請求,載入產品清單。
