首頁 web前端 js教程 AJAX使用中的非同步同步請求怎麼實現

AJAX使用中的非同步同步請求怎麼實現

Dec 04, 2017 pm 01:43 PM
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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

您同步的資料夾中的一個或多個項目不符合Outlook錯誤 您同步的資料夾中的一個或多個項目不符合Outlook錯誤 Mar 18, 2024 am 09:46 AM

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

解決jQuery AJAX請求遇到403錯誤的方法 解決jQuery AJAX請求遇到403錯誤的方法 Feb 20, 2024 am 10:07 AM

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

PHP 與 Ajax:建立一個自動完成建議引擎 PHP 與 Ajax:建立一個自動完成建議引擎 Jun 02, 2024 pm 08:39 PM

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

解決jQuery AJAX請求403錯誤的方法 解決jQuery AJAX請求403錯誤的方法 Feb 19, 2024 pm 05:55 PM

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

如何解決jQuery AJAX報錯403的問題? 如何解決jQuery AJAX報錯403的問題? Feb 23, 2024 pm 04:27 PM

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

如何使用Ajax從PHP方法取得變數? 如何使用Ajax從PHP方法取得變數? Mar 09, 2024 pm 05:36 PM

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

Python asyncio 進階指南:從初學者到專家 Python asyncio 進階指南:從初學者到專家 Mar 04, 2024 am 09:43 AM

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

PHP 與 Ajax:建立動態載入內容的解決方案 PHP 與 Ajax:建立動態載入內容的解決方案 Jun 06, 2024 pm 01:12 PM

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

See all articles