摘要:最近在學(xué),剛剛?cè)腴T,用到很多與相關(guān)的交互。也用了挺久的了,想寫一下學(xué)習(xí)筆記來記錄一下。實(shí)現(xiàn)過程是的基礎(chǔ),是核心對(duì)象,首先要實(shí)例化一個(gè)對(duì)象進(jìn)行請(qǐng)求,規(guī)定請(qǐng)求的類型以及是否異步處理請(qǐng)求。響應(yīng)服務(wù)器狀態(tài)響應(yīng)服務(wù)器狀態(tài)涉及對(duì)象的三個(gè)重要的屬性。
最近在學(xué)php,剛剛?cè)腴T,用到很多與Ajax相關(guān)的交互。Ajax也用了挺久的了,想寫一下學(xué)習(xí)筆記來記錄一下。今天先簡(jiǎn)單寫一下原理和過程。歡迎大家一起探討。什么是AJAX
AJAX的全稱是Asynchronous JavaScript and XML。
它是一種基于JavaScript的網(wǎng)頁應(yīng)用技術(shù)。傳統(tǒng)的提交方式會(huì)重載整個(gè)網(wǎng)頁,而利用AJAX技術(shù)可以使JavaScript與Web服務(wù)器異步傳輸數(shù)據(jù),從而實(shí)現(xiàn)不重載整個(gè)頁面的情況下,更新局部頁面局部?jī)?nèi)容。
var xhr = new XMLHTTPRequest();1. AJAX進(jìn)行請(qǐng)求,規(guī)定請(qǐng)求的類型、URL 以及是否異步處理請(qǐng)求。
xhr.open(method, url, async);
open()方法接收三個(gè)參數(shù):
method:請(qǐng)求的類型;GET 或 POST
url:文件在服務(wù)器上的位置
async:true(異步)或 false(同步)
AJAX的原理就是Asynchronous異步的,所以第三個(gè)參數(shù)async為true。
第一個(gè)參數(shù)method決定了請(qǐng)求類型,即傳輸數(shù)據(jù)的方式。
GET
與POST相比,GET 更簡(jiǎn)單也更快。但是傳輸數(shù)據(jù)時(shí)會(huì)將數(shù)據(jù)放在地址欄的后面,對(duì)客戶端而言不安全。除此之外,GET傳輸數(shù)據(jù)的大小受限,一般只有2k-8k,因?yàn)g覽器而異。所以在傳輸不敏感信息并且傳輸文件小的情況下,我們可以選擇用GET方式傳輸。
POST
POST傳輸是傳輸數(shù)據(jù)體,是隱式的,相對(duì)客戶端較為安全。但是從另一層面上來說,相對(duì)服務(wù)器端就有一定的風(fēng)險(xiǎn)了。POST傳輸數(shù)據(jù)沒有大小限制,但是服務(wù)器對(duì)上傳的數(shù)據(jù)有限制,需要手動(dòng)修改。
2. AJAX向服務(wù)器發(fā)送請(qǐng)求xhr.send(string); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
用GET方法傳輸時(shí),send(null),用POST方法傳輸時(shí),需要用setRequestHeader方法設(shè)置請(qǐng)求頭。
3. AJAX響應(yīng)服務(wù)器狀態(tài)AJAX響應(yīng)服務(wù)器狀態(tài)涉及XMLHttpRequest對(duì)象的三個(gè)重要的屬性:onreadystatechange、readyState、status。
readyState存有XMLHttpRequest的狀態(tài)。從0到4發(fā)生變化:
0: 請(qǐng)求未初始化
1: 服務(wù)器連接已建立
2: 請(qǐng)求已接收
3: 請(qǐng)求處理中
4: 請(qǐng)求已完成,且響應(yīng)已就緒
每當(dāng)readyState改變時(shí),就會(huì)觸發(fā)onreadystatechange事件,在事件中判斷請(qǐng)求是否成功,響應(yīng)是否就緒,當(dāng)readyState等于4且狀態(tài)為200時(shí),表示響應(yīng)已就緒:
xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { obj.success(xhr.responseText); } } }4. 使用 Callback 函數(shù)
obj.success(xhr.responseText);
AJAX響應(yīng)就緒后,對(duì)接收到的數(shù)據(jù)進(jìn)行后續(xù)的操作。
Ajax原生封裝var ajax = { create: function () { var xhr; if (XMLHttpRequest) { xhr = new XMLHttpRequest(); } else{ xhr = new ActiveXObject("Microsoft.XMLHTTP"); } return xhr; }, request: function (obj) { var xhr = this.create(); var data = this.changeData(obj.data); if (obj.type === "GET") { xhr.open(obj.type, obj.url+"?rand="+Math.random()+"&"+data, true); xhr.send(null); } else if (obj.type === "POST") { xhr.open(obj.type, obj.url, true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") xhr.send(data); } xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { obj.success(xhr.responseText); } } } }, changeData: function (data) { var arr = []; for (var i in data) { arr.push(i+"="+data[i]); } return arr.join("&"); } } // 調(diào)用 ajax.request({ type: "POST", url: "weibo.php", data: "act=update", success: function(res){ console.log(res); } });
可以看出調(diào)用的形式與jQuery的實(shí)現(xiàn)原理相似。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/99962.html
摘要:最近在學(xué),剛剛?cè)腴T,用到很多與相關(guān)的交互。也用了挺久的了,想寫一下學(xué)習(xí)筆記來記錄一下。實(shí)現(xiàn)過程是的基礎(chǔ),是核心對(duì)象,首先要實(shí)例化一個(gè)對(duì)象進(jìn)行請(qǐng)求,規(guī)定請(qǐng)求的類型以及是否異步處理請(qǐng)求。響應(yīng)服務(wù)器狀態(tài)響應(yīng)服務(wù)器狀態(tài)涉及對(duì)象的三個(gè)重要的屬性。 最近在學(xué)php,剛剛?cè)腴T,用到很多與Ajax相關(guān)的交互。Ajax也用了挺久的了,想寫一下學(xué)習(xí)筆記來記錄一下。今天先簡(jiǎn)單寫一下原理和過程。歡迎大家一起探...
摘要:抱歉,最近忙,本篇等有時(shí)間更新。引言本文基于框架做的一個(gè)生成和存儲(chǔ),主要目的是學(xué)習(xí)使用框架。書籍基于的,學(xué)習(xí)時(shí)使用框架開發(fā)。開發(fā)環(huán)境備注一直想把這本書的個(gè)作為系列分享出來,供初學(xué)者學(xué)習(xí)玩玩。 抱歉,最近忙,本篇等有時(shí)間更新。 引言 本文基于Laravel框架做的一個(gè)URL生成和存儲(chǔ)demo,主要目的是學(xué)習(xí)使用Laravel框架。內(nèi)容基于英文書籍《Packt.Laravel.Applic...
摘要:點(diǎn)擊此處了解網(wǎng)易微專業(yè)課程前段時(shí)間報(bào)名參加了網(wǎng)易云課堂微專業(yè)課程前端開發(fā)工程師,這周課程開始了,正式學(xué)習(xí)。以下內(nèi)容為前端開發(fā)工程師微專業(yè)的第一門課網(wǎng)頁制作的課程學(xué)習(xí)指南,學(xué)習(xí)視頻課程后自己整理的學(xué)習(xí)筆記,會(huì)持續(xù)更新內(nèi)容。 何為網(wǎng)易微專業(yè)? 微專業(yè)是由網(wǎng)易云課堂聯(lián)合各領(lǐng)域知名專家,以就業(yè)為導(dǎo)向,精心打造的職業(yè)培訓(xùn)方案。按要求完成學(xué)習(xí),考試通過可獲得專業(yè)認(rèn)定證書,令你求職或加薪多一份獨(dú)特優(yōu)...
摘要:點(diǎn)擊此處了解網(wǎng)易微專業(yè)課程前段時(shí)間報(bào)名參加了網(wǎng)易云課堂微專業(yè)課程前端開發(fā)工程師,這周課程開始了,正式學(xué)習(xí)。以下內(nèi)容為前端開發(fā)工程師微專業(yè)的第一門課網(wǎng)頁制作的課程學(xué)習(xí)指南,學(xué)習(xí)視頻課程后自己整理的學(xué)習(xí)筆記,會(huì)持續(xù)更新內(nèi)容。 何為網(wǎng)易微專業(yè)? 微專業(yè)是由網(wǎng)易云課堂聯(lián)合各領(lǐng)域知名專家,以就業(yè)為導(dǎo)向,精心打造的職業(yè)培訓(xùn)方案。按要求完成學(xué)習(xí),考試通過可獲得專業(yè)認(rèn)定證書,令你求職或加薪多一份獨(dú)特優(yōu)...
摘要:對(duì)象是的基礎(chǔ)使用它的和方法將請(qǐng)求發(fā)送到服務(wù)器或,請(qǐng)求的類型文件在服務(wù)器上的位置為異步,為同步將數(shù)據(jù)發(fā)送給服務(wù)器,僅用于方法當(dāng)設(shè)為時(shí),即為異步時(shí),規(guī)定響應(yīng)處于事件中的就緒函數(shù)的三個(gè)重要屬性每次發(fā)生改變時(shí)就會(huì)調(diào)用這個(gè)函數(shù)存儲(chǔ)著的狀態(tài),從到發(fā)生變 XMLHttpRequest對(duì)象是ajax的基礎(chǔ) 使用它的open()和send()方法將請(qǐng)求發(fā)送到服務(wù)器 var a=3; var requ...
閱讀 1650·2019-08-30 15:44
閱讀 2572·2019-08-30 11:19
閱讀 406·2019-08-30 11:06
閱讀 1567·2019-08-29 15:27
閱讀 3084·2019-08-29 13:44
閱讀 1629·2019-08-28 18:28
閱讀 2357·2019-08-28 18:17
閱讀 1987·2019-08-26 10:41