溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ajax原理及其優(yōu)點(diǎn)是什么

發(fā)布時間:2021-09-14 16:37:20 來源:億速云 閱讀:178 作者:柒染 欄目:web開發(fā)

本篇文章給大家分享的是有關(guān)ajax原理及其優(yōu)點(diǎn)是什么,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

在工作中用了Ajax N多次了,也看過一些相關(guān)方面的書籍,也算是認(rèn)識了它,但是一直沒有認(rèn)真總結(jié)和整理過相關(guān)的東東,失敗!
近有閑情,將之總結(jié)如下:
【名稱】
Ajax是Asynchronous JavaScript and XML(以及 DHTML 等)的縮寫。
詳情請移步Ajax: A New Approach to Web Applications
【原理】
簡單一些,就是通過使用XmlHttpRequest對象向服務(wù)器發(fā)送異步請求,獲取返回的數(shù)據(jù),并使用Javascript和DOM操作頁面內(nèi)的元素,從而達(dá)到改變頁面內(nèi)容的目的。
其中XmlHttpRequest對象是關(guān)鍵,因為它支持異步請求。XMLHttpRequest是完全用來向服務(wù)器發(fā)出一個請求的。它所包含的方法和屬性如下所示:
方法:
abort() 導(dǎo)致當(dāng)前正在請求被取消
getAllResponseHeaders() 返回一個字符串,包含氖 響應(yīng)標(biāo)頭的名稱和值
getResponseHeader(name) 返回指定的響應(yīng)標(biāo)頭的值
open(method, url, async, username, password) 設(shè)置請求的方法和目標(biāo)URL。請求可以聲明為同步的(可選),也可以給需要基于窗口誰的請求而提供用戶名和口令(可選)
send(content) 發(fā)起帶有指定內(nèi)容(可選)的請求
setRequestHeader(name, value) 利用指定的名稱和值,設(shè)置一個請求標(biāo)頭
屬性:
onreadystatechange 指派在請求的狀態(tài)發(fā)生變化時所使用的事件處理程序
readyState 一個整數(shù)值,指示請求的狀態(tài)如下:
0—-未初始化
1—-正在加載
2—-已加載
3—-交互
4—–完成
responseText 在響應(yīng)里所返回的內(nèi)容
responseXML 如果內(nèi)容是XML,就根據(jù)內(nèi)容而創(chuàng)建XML DOM
status 從服務(wù)器所返回的響應(yīng)狀態(tài)碼。例如:200表示成功,404表示未找到,參考HTTP規(guī)范
statusText 響應(yīng)所返回的狀態(tài)文本消息
對于此對象其它介紹請移步:XMLHttpRequest概述
【所包含的技術(shù)】
· 基于XHTML和CSS標(biāo)準(zhǔn)的表示;
· 使用Document Object Model進(jìn)行動態(tài)顯示和交互;
· 使用XMLHttpRequest與服務(wù)器進(jìn)行異步通信;
· 使用JavaScript綁定一切;
· 使用XML和XSLT;交換和操作數(shù)據(jù)。
以上的技術(shù)都是一些廣泛使用了的技術(shù),都屬于比較舊的技術(shù),ajax是這幾種技術(shù)的結(jié)合體。
【簡單實例】

 代碼如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<title></title> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<script type="text/javascript"> 
function ajax() { 
var xmlHttp; 
// 依據(jù)對象判斷,而不是依據(jù)瀏覽器 
if(window.XMLHttpRequest) { 
xmlHttp=new XMLHttpRequest();//mozilla瀏覽器 
}else if(window.ActiveXObject){ 
try{ 
xmlHttp=new ActiveXObject("Msxmlx2.XMLHTTP"); //IE老版本 
}catch(e){} 
try{ 
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); //IE新版本 
}catch(e){} 
if(!xmlHttp){ 
window.alert("不能創(chuàng)建XMLHttpRequest對象實列"); 
return false; 
} 
} 
if (!xmlHttp) { 
alert("創(chuàng)建XMLHttpRequest對象失敗!"); 
return false; 
}
xmlHttp.open('POST', 'index.php?get_a=2&get_b=3', false); 
xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=UTF-8;'); 
xmlHttp.send("post_a=1&post_b=2"); 
xmlHttp.onreadystatechange = function() { 
alert(xmlHttp.readyState); 
} 
if(xmlHttp.readyState == 4){ //判斷對象狀態(tài) 
var content_obj = document.getElementById("content"); 
content_obj.innerHTML = "正在處理數(shù)據(jù)..."; 
if(xmlHttp.status == 200){ //信息已經(jīng)成功返回,開始處理信息 
var returnStr = xmlHttp.responseText; 
content_obj.innerHTML = returnStr; 
}else{ //頁面不正常 
content_obj.innerHTML = "您所請求的頁面存在異常!"; 
} 
} 
} 
</script> 
</head> 
<body> 
<input type="button" value="ajax" onclick="ajax();" /> 
<div id="content">ajax內(nèi)容顯示區(qū)</div> 
</body> 
</html>


切記:當(dāng)發(fā)起一個POST請求時,需要對報頭 Content-type(內(nèi)容類型)進(jìn)行設(shè)置。這樣,服務(wù)器就知道如何來處理上傳的內(nèi)容。如果要模擬通過HTTP協(xié)議的POST方式來發(fā)送表單,則應(yīng)將內(nèi)容類型設(shè)置為application/x-www-form-urlencoded。
【優(yōu)點(diǎn)】
頁面無刷新,用戶體驗好;
異步,不打斷用戶操作,響應(yīng)速度快;
“按需取數(shù)據(jù)”,減少冗余請求,減輕服務(wù)器負(fù)擔(dān);
基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù),無需額外的插件;
可以使數(shù)據(jù)和表現(xiàn)分離;
【存在的問題】
一些設(shè)備還不支持
開發(fā)成本提高
使back按鈕失效,用戶操作后無法返回;
對流媒體支持沒有flash之流好;
對搜索引擎不友好
破壞程序的異常機(jī)制
存在一些安全問題,暴露了一些程序接口和數(shù)據(jù)邏輯

以上就是ajax原理及其優(yōu)點(diǎn)是什么,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI