Ajax

1.1art-template模板引擎

1、什么是HTML模板

?? HTML模板就是一段特定格式的HTML、CSS、JS代碼,程序根據(jù)這段代碼可以重復(fù)生成相同風(fēng)格的頁面元素。

2、什么是模板引擎(特指web開發(fā))

?? 模板引擎是解析模板與數(shù)據(jù)最終生成標(biāo)準(zhǔn)的HTML文檔的一種機(jī)制

3、前端模板引擎art-template

?? art-template 是一個簡約、超快的模板引擎。瀏覽器版本僅 6KB 大小

1.2 art-template模板語法

標(biāo)準(zhǔn)語法:

{{if user}}

? <h2>{{user.name}}</h2>

{{/if}}

模板配套數(shù)據(jù):

{

?? user:{name:'my name is art'}

}

1.3 art-template模板配套的數(shù)據(jù)格式

模板表達(dá)的意義:判斷如果 user對象存在,則輸出user對象中的name屬性值

{{if user}}

? <h2>{{user.name}}</h2>

{{/if}}

模板配套數(shù)據(jù):

{

?? user:{name:'my name is art'}

}

1.4 art-template 解析模板與數(shù)據(jù)代碼

1.5 art-template常見語法

1.輸出標(biāo)準(zhǔn)語法

{{value}}

{{data.key}}

{{data['key']}}

{{a ? b : c}}

{{a || b}}

{{a + b}}

2、條件判斷標(biāo)準(zhǔn)語法

{{if value}} ... {{/if}}

{{if value}} ... {{else}}...{{/if}}

{{if v1}} ... {{else if v2}} ... {{/if}}

{{if v1}} ... {{else if v2}} ...{{else}}... {{/if}}

1.6 art-template常見語法

1、循環(huán)輸出

{{each target}}

? ? {{$index}}?? <!-- 輸出每次遍歷的 數(shù)組是下標(biāo),對象是屬性名稱? -->

? ? {{$value}}? ? <!-- 輸出每次遍歷的 數(shù)組是下標(biāo)對應(yīng)的值,對象是屬性對應(yīng)的值 -->

{{/each}}

說明?。。?、target 支持 array 與 object 的迭代

? ? ? ? 2、$value 與 $index 可以自定義:{{each target val key}}

1.7 art-template常見語法

1.原文輸出:

{{@ value }}

2、配套的數(shù)據(jù)通常是html字符串

{ value : '<h2>這是art的值</h2>' }

額外:

contentType: false,// 告訴服務(wù)器 這個數(shù)據(jù)是文件 不是 普通的文本

processData: false,// 告訴jq 這個是文件 不是普通的文本

day4

1.1 jQuery文件上傳進(jìn)度功能

1、核心思路:

? 1、自定義帶有upload.onprogress 進(jìn)度處理邏輯的XMLHttpRequest對象

? 2、改變$.ajax方法內(nèi)部本身的XMLHttpRequest為帶有upload.onprogress 進(jìn)度處理邏輯的XMLHttpRequest對象

2、核心代碼

$.ajax({

? ?? xhr: function () {

? ?? let new_xhr = new XMLHttpRequest();

? ?? new_xhr.upload.onprogress = function (e) {

? ? ? ? ? ?? if(e.lengthComputable){ // 是否可計算長度

? ? ? ? ? ? ? ? ? ? e.loaded? //已經(jīng)上傳的長度

? ? ? ? ? ? ? ? ? ? e.total? // 要上傳的總長度

? ? ? ? ? ? ?? }? ? ? ? ? ? ? ? ? ? ? ?

? ? ? }

? ? ? ? return new_xhr;

? ? ? }})

2.1 xhr.timeout設(shè)置Ajax請求超時

1、什么是Ajax請求超時

?? 在指定時間內(nèi)服務(wù)器沒有響應(yīng)Ajax請求,那么這次請求即為超時,默認(rèn)是0,即沒有超時

2、異步對象請求超時處理

let xhr = new XMLHttpRequest();

xhr.open();

xhr.timeout = 500; // 表示服務(wù)器在500毫秒之內(nèi)沒有響應(yīng)則自動終止當(dāng)前ajax請求

xhr.send();

xhr.onload = function () {}

3.1 HTTP協(xié)議

目標(biāo):了解Http協(xié)議的作用

HTTP:超文本傳輸協(xié)議(Hyper Text Transfer Protocol)

作用:規(guī)范了瀏覽器和服務(wù)器的數(shù)據(jù)交互格式

3.2 HTTP協(xié)議的請求報文

目標(biāo):了解請求報文的格式

? 請求報文:客戶端向服務(wù)器發(fā)送請求時會攜帶一些基本信息過去,這些信息稱為請求報文

? 請求報文格式:請求報文需要遵守Http協(xié)議的特定格式,這個特定格式叫做請求報文格式

3.2 HTTP協(xié)議的請求報文格式

3.3 Http響應(yīng)狀態(tài)碼

HTTP狀態(tài)碼:由三個十進(jìn)制數(shù)字組成,第一個十進(jìn)制數(shù)字定義了狀態(tài)碼類型,后面兩個數(shù)字對狀態(tài)碼進(jìn)行了二級分類

3.4 常見響應(yīng)狀態(tài)碼說明

2**的狀態(tài)碼表示服務(wù)器已經(jīng)成功處理了請求,常見的狀態(tài)碼為200

3**的狀態(tài)碼,表示服務(wù)器要求客戶端進(jìn)行新的URL重定向,需要客戶端進(jìn)一步請求新URL才能完成資源的請求

4**的狀態(tài)碼,表示客戶端的請求有非法內(nèi)容導(dǎo)致本次請求失敗,常見的狀態(tài)碼有:

5**的狀態(tài)碼,表示服務(wù)器在處理客戶端請求時出現(xiàn)了錯誤,常見的狀態(tài)碼有:

4.1 IP地址

IP地址(Internet Protocol Address)是指互聯(lián)網(wǎng)協(xié)議地址,又譯為網(wǎng)際協(xié)議地址

格式:xxx.xxx.xxx.xxx 由4組數(shù)字組成

每一組數(shù)字取值范圍0-255包含0和255

每一組數(shù)字中間用點分割

IP地址作用:IP地址被用來給鏈接到網(wǎng)絡(luò)中的終端設(shè)備進(jìn)行編號,具有唯一性,多個設(shè)備之間通訊都是基于IP地址

通俗理解:IP地址好比電話號碼,每個電話都需要有一個號碼才能打電話,同樣的,一臺電腦或網(wǎng)絡(luò)設(shè)備需要一個IP地址才能進(jìn)行通信

IP地址的分類

公有地址(Public address):通過它直接訪問因特網(wǎng),例如:通過www.ip138.com查出來的地址

私有地址(局域網(wǎng)地址):專門為組織機(jī)構(gòu)內(nèi)部使用,例如:192.168開頭的IP地址

代表本機(jī)地址: 127.0.0.1

4.2 端口

端口:英文是Port表示設(shè)備與外界通訊的出口,例如電腦QQ,微信,內(nèi)網(wǎng)通等軟件之間要進(jìn)行網(wǎng)絡(luò)通訊都需要用到端口

電腦會為這些軟件都分配一個端口。

通俗理解:電腦比作房子的話,那么端口就相當(dāng)于是出入這個房子的門

端口特點:

端口是通過端口號來標(biāo)記的,端口號是一個整數(shù),取值范圍:0-65535

端口只能被一個軟件占用,如果其他軟件要使用相同的端口就會沖突

端口通常是配合IP或域名一起使用,例如:http://127.0.0.1:3001? ,www.baidu.com:80

常用端口:

www服務(wù)的默認(rèn)端口是80,一個url地址上如果不帶端口,那么默認(rèn)就是80,例如www.baidu.com 默認(rèn)就是80

FTP服務(wù)的默認(rèn)端口是21

5.1 同源

什么是同源?

在編程中所謂同源是指:同時滿足協(xié)議相同、域名(IP)相同、端口相同的兩個URL我們就認(rèn)為它們同源

舉例:我們有一個url: http://www.test.com:8080/pages/index.html

與之同源的url:

? ? http://www.test.com:8080/api/getlist

與之不同源的url:

? ? file:///C:/pages/index.html 不同源 (協(xié)議不同)

? ? https://www.test.com:8080/pages/index.html (協(xié)議不同)

? ? http://www.abc.com:8080/pages/index.html (域名不同)

? ? http://www.test.com/pages/index.html (端口不同,不填寫端口默認(rèn)是80)

5.2 同源策略

什么是同源策略?

? 瀏覽器中為了安全,在非同源的兩個地址中,瀏覽器會利用它的同源策略機(jī)制限制它們訪問一些數(shù)據(jù)

? ? 同源策略是瀏覽器本身的一種機(jī)制

限制訪問數(shù)據(jù)類型

Cookie、LocalStorage 等無法讀取

DOM 無法獲得

AJAX 請求在瀏覽器端有跨域限制

5.3 Ajax跨域錯誤

用ajax請求http://127.0.0.1:3001/getStudentsJSONP.js就會產(chǎn)生跨域錯誤提示

$.ajax({

? ? ? ? ? ? ? ? type: 'GET',

? ? ? ? ? ? ? ? url: 'http://127.0.0.1:3001/getStudentsJSONP.js'

? ? ?? })

5.4 Ajax跨域解決方案-JSONP

JSONP跨域:

JSONP所有瀏覽器均可以使用包括IE6

它只支持GET跨域請求,不支持POST跨域請求

JSOPN需要服務(wù)器的支持

JSONP不屬于Ajax請求

jQuery實現(xiàn)JSNOP跨域核心代碼:

$.ajax({

? ? ? ?? type: 'GET',

? ? ? ?? url: 'http://127.0.0.1:3001/getStudentsJSONP.js',? ? ? ? ? ? ? ? ? ? ?

? ? ? ?? dataType: 'jsonp', // 指定dataType類型為jsonp

})

JSONP實現(xiàn)的本質(zhì):

通過在網(wǎng)頁上添加一個<script>元素去請求服務(wù)器地址

服務(wù)器將數(shù)據(jù)用函數(shù)+參數(shù)格式響應(yīng)回來

瀏覽器執(zhí)行函數(shù),獲取參數(shù)即為數(shù)據(jù)

5.5 Ajax跨域解決方案-CORS

CORS是一個W3C標(biāo)準(zhǔn),全稱是"跨域資源共享"(Cross-origin resource sharing)

特點:

1.新式瀏覽器都支持該功能,IE瀏覽器不能低于IE10

2.CORS需要服務(wù)器支持

3.由后臺程序員在服務(wù)器做CORS設(shè)置即可

4.整個通信過程都是瀏覽器自動完成的,不需要前端工程師做任何介入

檢驗一個Api接口地址是否支持CORS跨域

1.打開瀏覽器調(diào)試工具進(jìn)入NetWork

2.查看響應(yīng)報文頭中如果有以下必選項的頭信息,則表示服務(wù)器開啟了CORS跨域

?? 1.Access-Control-Allow-Origin(必選)

?? 2.Access-Control-Allow-Credentials(可選)

?? 3.Access-Control-Expose-Headers(可選)

6.1 XML可擴(kuò)展標(biāo)記語言

XML:指可擴(kuò)展標(biāo)記語言,XML 被設(shè)計用來傳輸和存儲數(shù)據(jù)

XML格式舉例:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>

<root>

? ? <items>

? ? ? ? <item>

? ? ? ? ? ? <id>4</id>

? ? ? ? ? ? <name>jodan</name>

? ? ? ? ? ? <age>21</age>

? ? ? ? ? ? <gender>男</gender>

? ? ? ? ? ? <zhuanye>ruby</zhuanye>

? ? ? ? ? ? <address>白云區(qū)</address>

? ? ? ? </item>

? ? </items>

</root>

6.2 jQuery請求接口獲取XML數(shù)據(jù)并解析

目標(biāo):重點掌握通過jquery獲取響應(yīng)回來的數(shù)據(jù)方式

接口:http://127.0.0.1:3001/getUserNameXML 返回的數(shù)據(jù)是XML格式的

7.1 jQuery Ajax請求loading效果

loading效果的作用:

?? 如果網(wǎng)速較慢或者服務(wù)器響應(yīng)較慢的情況下,我們需要提示用戶正在請求數(shù)據(jù),讓用戶感覺網(wǎng)頁是在工作的,提高使用體驗

$.ajax({

? ? beforeSend:function(XHR){}? // ajax發(fā)出請求前 彈出正在加載中

? ? complete:function(XHR){} // ajax請求完成后,關(guān)閉正在加載中提示

})

8.2 防抖-應(yīng)用

防抖在驗證用戶名是否可用案例上的應(yīng)用

案例:

// 1.0 防抖寫法步驟1:定義一個變量用來存儲setTimeout返回的句柄

? ? ? ? ? ? let time = null;

? ? ? ? ? ? $('#name').keydown(function () {

? ? ? ? ? ? ? ? // 3.0 判斷前一次的time如果有值,則清除本次settimeout的執(zhí)行

? ? ? ? ? ? ? ? if(time !=null){? clearTimeout(time); }

? ? ? ? ? ? ? ? // 2.0 給句柄賦值

? ? ? ? ? ? ? ? time = setTimeout(() => {

? ? ? ? ? ? ? ? ? ? $.ajax({ });

? ? ? ? ? ? ? ? },500)

? ? ? ? ? ? })

什么是節(jié)流?

在一定時間內(nèi)不管觸發(fā)多少次相同的事件,都只執(zhí)行第一次的事件

節(jié)流的核心代碼

// 1.0 定義變量

let timer = null;

// 2.0 如果timer不為空,則表示當(dāng)前有一個setTimeout的回調(diào)函數(shù)等待執(zhí)行,就不再設(shè)置新的setTimeout

if (timer) return;

timer = setTimeout(() => {

? ? // 4.0 執(zhí)行完畢以后,timer置空,表示下個時間段可以設(shè)置新的setTimeout處理邏輯

? ? timer = null;

}, 時間);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Ajax 基礎(chǔ) 傳統(tǒng)網(wǎng)站中存在的問題 網(wǎng)速慢的情況下,頁面加載時間長,用戶只能等待 表單提交后,如果一項內(nèi)容不...
    AizawaSayo閱讀 694評論 0 1
  • Ajax編程基礎(chǔ) 一、Ajax基礎(chǔ) 不刷新頁面的情況下向服務(wù)端發(fā)送請求和服務(wù)器端進(jìn)行交互,從而更改客戶端頁面數(shù)據(jù)或...
    coder_shen閱讀 309評論 0 0
  • 1. 介紹 1.1 Ajax介紹 Ajax的全稱是Asynchronous JavaScript and XML ...
    riverhh閱讀 481評論 1 2
  • AJAX概述 ajax是在瀏覽器端進(jìn)行網(wǎng)絡(luò)編程(發(fā)送請求、接受響應(yīng))的技術(shù)方案,可以通過 js 直接獲取服務(wù)端最新...
    GongShengM閱讀 392評論 0 0
  • AJAX 概述 背景 “JavaScript 對我們而已能力有限”,我們目前所了解到的 Web 所提供的 API ...
    這是這時閱讀 2,100評論 0 2

友情鏈接更多精彩內(nèi)容