ajax在我們的開發(fā)中是必須使用的一個技術(shù),ajax即異步的javascript和xml但是現(xiàn)在我們通常使用json來完成數(shù)據(jù)的交互,ajax職責很單一就是數(shù)據(jù)的交互,發(fā)送數(shù)據(jù)接收數(shù)據(jù)是它的核心功能也是唯一的功能。
ajax的實作依賴XMLHttpRequest,它的基本使用如下:
var xhr; window.XMLHttpRequest?xhr = new XMLHttpRequest():xhr = new ActiveXObject("Microsoft.XMLHTTP"); xhr.open("get","demo!register.action?name=zt&age=23",true); xhr.send(null); xhr.onreadystatechange = function(){ if(xhr.readyState==4&&xhr.status==200){ alert(JSON.parse(xhr.responseText)); } }
ajax的職責就是發(fā)送資料和接收資料我們基本使用流程為:
. 3.接收處理伺服器傳回的資料 根據(jù)上面的步驟來實現(xiàn)一個非同步請求資料的過程,首先取得一個xhr對象,在現(xiàn)代瀏覽器中我們可以直接透過實例化來取得一個xhr物件:var xhr = new XMLHttpRequest( );在IE5、IE6中我們必須使用ActiveXObject來取得xhr物件:var xhr = new ActiveXObject("Microsoft.XMLHTTP")。 此時我們已經(jīng)得到了xhr物件接下來就是發(fā)送數(shù)據(jù),透過xhr.open()方法來執(zhí)行發(fā)送資料的方式,xhr.open()可以接收5個參數(shù),我們經(jīng)常使用的是前三個: xhr.open(arg1,arg2,arg3)arg1表示請求資料的方式一般為get或post
arg2表示請求的伺服器位址??就是異步所以我們一般都是使用非同步的方式第三個參數(shù)設(shè)定為true(true表示進行非同步請求false表示進行同步請求)
xhr.open(...); xhr.setRequestHeader(...); xhr.overrideMimeType(...); xhr.onreadystatechange = function(){...}; xhr.send(...);但是由於xhr.onreadystatechange是一個事件,所以其放在send()之後也是可以執(zhí)行的,出於易讀性我們一般將對xhr的設(shè)定放在send()函數(shù)之前。 在send()之後可以透過xhr.readyState和xhr.status的來監(jiān)測本次請求的狀態(tài),如果滿足xhr.readyState==4&&xhr.status==200則本次請求成功:
?
?在請求成功時我們可以透過xhr.responseText來取得伺服器傳回的數(shù)據(jù),需要注意xhr.responseText是一個字串。 ajax常用API 上面的請求過程是一個最基本的請求過程xhr物件還有幾個經(jīng)常使用的方法分別為xhr.abort()、xhr.setRequestHeader()、xhr.overrideMimeType()。 xhr.abort():終止一個請求,直接呼叫即可不需要設(shè)定參數(shù)
xhr.abort()
xhr.setRequestHeader():設(shè)定發(fā)送的請求頭: xhr.setRequestHeader():設(shè)定傳送的請求頭: Type","application/json; charset=utf-8")第一個參數(shù)表示要設(shè)定的header,第二個參數(shù)表示要設(shè)定的header的值。 xhr.setRequestHeader()必須在xhr.open()和xhr.send()之間,否則會拋出異常,同時xhr.setRequestHeader()的第一個參數(shù)是對大小寫不敏感的只要我們字母寫的對就能夠設(shè)定成功,但是出於易讀性我們要設(shè)定為正確的格式。
xhr.overrideMimeType():重寫回應(yīng)頭的Content-Type:
JSON.parse()和JSON.stringify()使用
JSON.parse()用來將一個物件轉(zhuǎn)換為字串,JSON.stringify()用來將一個字串轉(zhuǎn)換為物件。在利用ajax進行資料互動的過程中傳回的資料多數(shù)的時候是一個JSON格式的字串,如果伺服器給我們回傳了資料此時我們就需要利用JSON.parse()來解析傳回的資料(xhr.responseText即為伺服器傳回的資料):
xhr.onreadystatechange = function(){ if(xhr.readyState==4&&xhr.status==200){ var data = JSON.parse(xhr.responseText); } }
在使用post方式傳送資料的過程中,如果不是檔案上傳一般情況下傳送的也是一個JSON數(shù)據(jù),要想能夠成功的傳送到後臺就需要用JSON.stringify( )來將JSON物件來轉(zhuǎn)換為字串,同時Content-Type要設(shè)定為application/json:
var sendData = {name:"zt",age:23}; ... xhr.setRequestHeader("Content-Type","application/json; charset=utf-8"); xhr.send(JSON.stringify(sendData));
另外利用JSON.parse()和JSON.stringify()可以實作一個物件的深拷貝功能:
var sendData = {name:"zt",age:23}; var copyData = JSON.parse(JSON.stringify(sendData));
$.ajax基本使用
為了方便使用JQ為我們封裝好了一個ajax來方便我們的使用:
$.ajax({ type:"post",//請求方式 url:"url",//請求地址 data:"...",//發(fā)送至服務(wù)端的數(shù)據(jù) contentType:"...",//設(shè)置發(fā)送數(shù)據(jù)的類型如果data是一個json字符串這里要設(shè)置為application/json success:function(data){...},//請求成功的回調(diào)函數(shù)data可看做是服務(wù)器返回的數(shù)據(jù) error:function(){...}//請求失敗的回調(diào)函數(shù) });
或者:
$.ajax({ type:"post", url:"url", data:"...", contentType:"...", }) .done(function(data){...}) .fail(function(){...});
回調(diào)函數(shù)中的data即為服務(wù)器返回的數(shù)據(jù)的一個代理,直接使用即可。
為了簡化我們的開發(fā)JQ提供了一些全局設(shè)置函數(shù)包括$.ajaxSetup()、$.()ajaxStart()、$().ajaxStop()、$().ajaxComplete()、$().ajaxError()、$().ajaxSuccess()、$().ajaxSend()。
$.ajaxSetup()用來設(shè)置基本的參數(shù)例如:
$.ajaxSetup({ type:"post", contentType:"application/json; charset=utf-8" });
我們在使用$.ajax時可以直接這樣設(shè)置:
$.ajax({ url:"", success:function(){...}, error:function(){...} })
最終等價于:
$.ajax({ type:"post", contentType:"application/json; charset=utf-8", url:"", success:function(){...}, error:function(){...} })
$().ajaxStart()、$().ajaxStop()、$().ajaxComplete()、$().ajaxError()、$().ajaxSuccess()、$().ajaxSend()都是用來設(shè)置一些全局回調(diào)函數(shù)的。例如我們在提交數(shù)據(jù)時為了防止多次提交我們需要在發(fā)送請求時產(chǎn)生一個loading遮罩在數(shù)據(jù)發(fā)送完成后取消遮罩,如果在每一次ajax請求時我們都設(shè)置一次就會很麻煩,此時我們就可以用全局回調(diào)函數(shù)來簡化我們的操作:
利用全局事件在請求開始時產(chǎn)生一個遮罩在請求完成時取消遮罩:
$(document).ajaxStart(function(){ loadingMask.show(); }); $(document).ajaxComplete(function(){ loadingMask.hide(); });

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

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

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

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

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

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

熱門話題

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

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

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

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

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

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

為了提升Ajax安全性,有幾種方法:CSRF保護:產(chǎn)生令牌並將其傳送到客戶端,在請求中新增至伺服器端進行驗證。 XSS保護:使用htmlspecialchars()過濾輸入,防止惡意腳本注入。 Content-Security-Policy頭:限制惡意資源加載,指定允許載入腳本和樣式表的來源。驗證伺服器端輸入:驗證從Ajax請求接收的輸入,防止攻擊者利用輸入漏洞。使用安全Ajax函式庫:利用jQuery等函式庫提供的自動CSRF保護模組。

ajax不是一個特定的版本,而是一種使用多種技術(shù)的集合來非同步載入和更新網(wǎng)頁內(nèi)容的技術(shù)。 ajax沒有特定的版本號,但是有一些ajax的變體或擴充:1、jQuery AJAX;2、Axios;3、Fetch API;4、JSONP;5、XMLHttpRequest Level 2;6、WebSockets;7、Server-Sent Events;8、GraphQL等等。
