什麼是Ajax????
我理解的事這樣的:
Ajax是能夠在不重新整理頁面的情況下,讓網頁區域性更新的技術。
使用Ajax請求資料分為四步:
1.建立物件
var xhr = new XMLHttpRequest();
2.傳送請求
xhr.open("GET","hot.json(這裡寫與後臺檔案的路徑)",true);
3.等待響應,每次網路請求的狀態代表都會呼叫這個方法
xhr.send();//因為我們是要獲取資料,而不是提交資料,所以這裡的send方法裡面的資料為空。
4.執行完成之後,後臺給前臺返回一定格式的資料,此時需要判斷xhr的執行狀態,如下圖:
注意:request(就是xhr).responseText就是後臺返回給我們的資料,這裡就相當於$.ajax()裡面的success所對應的函式,所包含的引數data。
![我理解的Ajax,與你相同嗎?](https://i.iter01.com/images/fa4477a85ee961c0af11b40416c1e60b563eab4ad21aabeb8e0e9358a47e4c5e.png)
值得一提的是:上述圖片的程式碼,就相當於xhr的onload事件,即上述程式碼用下圖替換也是一樣的:
![我理解的Ajax,與你相同嗎?](https://i.iter01.com/images/f24b87b2d1f7283dd8d266f4cbc58b557d10cd5452f45509f58be8d3d23ac39b.png)
那我們來總結一下小黃人的執行狀態(數字代表各種狀態):
0:初始狀態(請求未初始化)
1:建立連線(伺服器連線已建立)
2:客戶端向後臺傳送資料(請求已接收)
3:伺服器開始返回資料(請求處理中)
4:客戶端接受資料完畢(請求已完成,且響應已就緒)
複製程式碼
關於Ajax就先介紹到這裡,好像都是固定的寫法,沒有什麼好講解的,我最想講的是接下來的一個小練習:用來實現點選圖片,出現相應的電影介紹,資料來源都是後臺。
CSS樣式部分:(讀者根據自己的喜好,可自行設定樣式)
.wrap{width: 620px;border: 1px solid black;margin:0px auto;float: left;}
.title{width: 618px;height: 50px;border: 1px solid yellow;font-size: 32px;color: red;text-align: center;text-shadow: 0 0 5px blue;}
.box{width: 200px;height: 248px;border: 1px solid green;float: left;margin-top: 10px;position: relative;}
.box:nth-of-type(3n){margin-left: 3px;margin-right: 3px;}
.tits{width: 200px;position: absolute;bottom: 0;left: 0;text-align: center;}
.detail{width: 520px;border: 1px solid black;background: rgba(0,0,0,0.8);margin:0px auto;position: relative;left: 50px;}
.fm{width: 210px;height: 300px;border: 1px solid transparent;float: left;margin-top: 15px;margin-left: 20px;}
.jianjie{width: 260px;float: right;border: 1px solid transparent;margin-right: 20px;margin-top: 15px;height: 300px;}
.jianjie div{width: 250px;height: 35px;font-size: 17px;padding-left: 10px;box-sizing: border-box;color: blue;text-shadow: 0 0 3px white;text-align: start;border: 1px solid transparent;line-height: 35px;margin-top: 14px;margin-left: auto;margin-right: auto;}
.scores{width: 518px;height: 40px;border: 1px solid transparent;margin: 15px auto;float: left;color: red;text-shadow: 0 0 3px white;text-align: start;padding-left: 20px;box-sizing: border-box;line-height: 40px;}
.yanyuan{width: 518px;height: 273px;border: 1px solid cyan;overflow-x: scroll;overflow-y: hidden;}
.scrolls{width: 300%;height: 258px;}
.preserve{width: 200px;height: 250px;float: left;margin: 8px 5px;}
.tu{width: 198px;height: 200px;}
.mingzi{width: 198px;height: 30px;text-align: center;color: blue;text-shadow: 0 0 3px white;line-height: 30px;font-size: 14px;margin-top: 15px;}
.btn{width: 30px;height: 30px;background: orange;position: absolute;right: 0;top: 0;color: white;text-align: center;line-height: 24px;font-size: 24px;outline: none;}
.whole{width: 1160px;border: 1px solid red;}
.wrap,.detail{float: left;}
.whole_father{width: 640px;height: 800px;overflow: auto;margin-top: 50px;}
複製程式碼
body部分:(寫個基本的框框就ok,反正是要動態生成元素的)
![我理解的Ajax,與你相同嗎?](https://i.iter01.com/images/8b2ce6729b31b05703882ee9aaa56df6f37d1e19b0c259d4ecf8b6cb7e12cc32.png)
JS部分:
var title1 = document.getElementsByClassName("title")[0];
var wrap1 = document.getElementsByClassName("wrap")[0];
var detail1 = document.getElementsByClassName("detail1")[0];
var fm1 = document.getElementsByClassName("fm")[0];
var btn = document.getElementsByClassName("btn")[0];
console.log(wrap1);
<!--**小黃人的請求開始啦**-->
var request = new XMLHttpRequest();
<!--true為非同步請求,可省略不寫,預設的就是非同步,false是同步,一般不用。-->
request.open("GET","hot.json",true);
<!--因為是要獲得資料,這裡的括號內部為空-->
request.send();
request.onreadystatechange = function(){
<!--狀態判斷-->
if(request.readyState ==4 && request.status ==200){
<!--資料載入都在這裡哦-->
var obj = JSON.parse(request.responseText);
console.log(obj);
title1.innerHTML = obj.title;
var arr = [];
<!--for迴圈遍歷後臺傳過來的資料,放在對應的位置就好了-->
for (var i = 0; i < obj.subjects.length; i++) {
<!--注意:既然是要擺出點高階的東西(開個玩笑),元素自然是要動態生成的-->
var divs = document.createElement("div");
divs.className = "box";
wrap1.appendChild(divs);
divs.style.background = "url("+obj.subjects[i].images.large+") 0 0/100% 85% no-repeat";
var tits1 = document.createElement("div");
tits1.className = "tits";
tits1.innerHTML = obj.subjects[i].title;
divs.appendChild(tits1);
arr.push(divs);
}
console.log(arr);
var names1 = document.getElementsByClassName("names")[0];
var man1 = document.getElementsByClassName("man")[0];
var years1 = document.getElementsByClassName("years")[0];
var bqian1 = document.getElementsByClassName("bqian")[0];
var looked1 = document.getElementsByClassName("looked")[0];
var scores1 = document.getElementsByClassName("scores")[0];
var scrolls1 = document.getElementsByClassName("scrolls")[0];
var detail1 = document.getElementsByClassName("detail")[0];
var whole1 = document.getElementsByClassName("whole")[0];
var whole_father = document.getElementsByClassName("whole_father")[0];
// 詳情頁
for (var i = 0; i < arr.length; i++) {
arr[i].index = i;
arr[i].onclick = function(){
whole1.style.transform = "translateX("+(-wrap1.offsetWidth)+"px)";
// detail1.offsetTop = parseInt(detail1.offsetTop+this.offsetTop)+"px";
console.log(detail1.offsetTop);
btn.onclick = function(){
whole1.style.transform = "translateX(0px)";
}
fm1.style.background = this.style.background;
fm1.style.backgroundSize = "100% 100%";
names1.innerHTML = obj.subjects[this.index].title;
man1.innerHTML = obj.subjects[this.index].original_title;
years1.innerHTML = "電影年份:"+obj.subjects[this.index].year;
bqian1.innerHTML = "標籤:"+obj.subjects[this.index].genres.join("/");
looked1.innerHTML = obj.subjects[this.index].collect_count+"人看過";
scores1.innerHTML = "評分:"+obj.subjects[this.index].rating.average+" 最高:"+obj.subjects[this.index].rating.max+" 最低:"+obj.subjects[this.index].rating.min+" 星級:"+obj.subjects[this.index].rating.stars;
scrolls1.innerHTML = null;
for (var i = 0; i < obj.subjects[this.index].directors.length; i++) {
var preserve1 = document.createElement("div");
preserve1.className = "preserve";
scrolls1.appendChild(preserve1);
var tu1 = document.createElement("div");
tu1.className = "tu";
preserve1.appendChild(tu1);
var mingzi1 = document.createElement("div");
mingzi1.className = "mingzi";
preserve1.appendChild(mingzi1);
tu1.style.background = "url("+obj.subjects[this.index].directors[i].avatars.large+") 0 0/100% 100% no-repeat";
console.log(preserve1);
mingzi1.innerHTML = "導演:"+obj.subjects[this.index].directors[i].name;
}
for (var i = 0; i < obj.subjects[this.index].casts.length; i++) {
var preserve2 = document.createElement("div");
preserve2.className = "preserve";
scrolls1.appendChild(preserve2);
var tu2 = document.createElement("div");
tu2.className = "tu";
preserve2.appendChild(tu2);
var mingzi2 = document.createElement("div");
mingzi2.className = "mingzi";
preserve2.appendChild(mingzi2);
tu2.style.background = "url("+obj.subjects[this.index].casts[i].avatars.large+") 0 0/100% 100% no-repeat";
mingzi2.innerHTML = "主演:"+obj.subjects[this.index].casts[i].name;
}}}}}
複製程式碼
最後:希望文章對讀者有所幫助,不足之處還請各位大牛多多指教。