### AJAX是什么
AJAX =異步JavaScript和XML(json)。通過在后臺與服務器進行少量數(shù)據(jù)交換蜒秤,AJAX可以使網(wǎng)頁實現(xiàn)異步更新。這意味著可以在不重新加載整個網(wǎng)頁的情況下前鹅,對網(wǎng)頁的某個部分進行更新毒租。
### 使用AJAX請求數(shù)據(jù)
```
1赘被、創(chuàng)建XMLHttpRequest對象:
標準瀏覽器的創(chuàng)建方法:new XMLHttpRequest()
IE5悴侵、6的創(chuàng)建方法:new ActiveXObject("Microsoft.XMLHTTP")
2瞧剖、向服務器發(fā)送請求
2.1配置請求? open()方法的三個參數(shù)
參數(shù)一:請求的方式
GET:
直接把請求參數(shù)拼接在URL之后,.send方法中傳null可免。
POST:
把請求參數(shù)放在send()方法中筒繁,如果參數(shù)中有中文,需要用encodeURL進行編碼
參數(shù)二:請求的文件在服務器上的位置
相對路徑:info.json
絕對路徑:http://127.0.0.1:8020/info.json
參數(shù)三:是否異步請求
true:異步請求
false:同步請求
2.2 發(fā)送請求
send()方法:
發(fā)送請求巴元,如果是POST請求,請求參數(shù)放在這里
2.3驮宴、監(jiān)聽readystatechange事件
每次readystate屬性值發(fā)送改變都會觸發(fā)這個事件
ready state取值情況:0:請求末初始化逮刨。1:服務器連接已建立。2:請求已接受。3:請求處理中修己。4:請求已完成恢总,且響應已就緒。
ststues屬性取值情況:200:請求成功睬愤。404:未找到頁面片仿。500:服務器錯誤。
```
### 創(chuàng)建一個完整的AJAX
```
<!doctype html>
<html lang="en">
<head>
????? <meta charset = "utf-8"/>
????? <title></title>
</head>
<body>
<script type = "text/javascript">
// 1尤辱、創(chuàng)建對象
var? xhr = new XMLHttpRequest();
// 2砂豌、配置請求
xhr.open('GET','data.json',true)
//3、發(fā)送請求
xhr.send()
// 4光督、監(jiān)聽請求狀態(tài)
xhr阳距。onreadystatechange = function () {
if(xhr.readyState==4&&xhr.status==200){
console.log(xhr.responseText)
}
}
</script>
</body>
</html>
data.json數(shù)據(jù)
{
“title”:“北京昨夜大雨”,
“des”:"我臺消息结借,昨夜北京一場大雨筐摘,小車成船"
}
###兼容性問題
<script type="text/javascript>
// 1、創(chuàng)建請求對象
// var xhr = new ActiveXObject('Microsoft.XMLHTTP');
// var xhr = new XMLHttpRequest()
var xhr = window.XMLHttpRequest? new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP')
// 配置請求對象
// 在open方法中配置請求對象船老,有三個常用參數(shù):
// 1咖熟、請求方法:GET/POST
// 2、請求接口的路徑:絕對路徑/相對路徑
// 3.實發(fā)發(fā)起異步請求柳畔,默認是true馍管,可以更改為同步請求
// 第二個參數(shù)情況取決于第一個參數(shù),如果是GET請求荸镊,請求的接口需要參數(shù)咽斧,則把參數(shù)字符串拼接在接口后,使用“躬存?”鏈接
// 如果是POST請求张惹,請求的接口需要參數(shù),就把參數(shù)字符串當做send()方法的參數(shù)傳遞給服務器
xhr.open('GET','data.xml',true)
// 發(fā)送請求
xhr.send(null);
// 監(jiān)聽請求情況
xhr.onreadystatechange=function(){
// 只有在服務器處理完畢請求岭洲,且處理成功時才可以獲取服務器返回的數(shù)據(jù)宛逗,
// 當xhr.readystate值是4時,代表服務器請求處理完畢
// 當xhr.status的值是200-300或304時盾剩,表示服務器成功的把數(shù)據(jù)返回下來雷激,一般情況下值為200
if(xhr.readyState==4&&xhr.status==200){
//獲取服務器返回的值
// 如果傳輸?shù)臄?shù)據(jù)格式是json格式,則需要從responseText屬性中獲取中
//console.log(xhr.responseText)
// 如果服務器傳輸?shù)臄?shù)據(jù)格式是XML格式告私,則需要從responseXML屬性中取值
console.log(xhr.responseXML)
</script>
```