Ajax的基础与进阶

Ajax

URL地址

URL地址的概念

URL又叫统一资源定位符,用于标识互联网上每个资源的唯一存放位置。浏览器只有通过URL地址,才能正确定位资源的存放位置,从而成功访问到对应的资源。

常见的URL举例:

http://www.baidu.com

http://www.taobao.com

URL地址的组成部分

URL地址一般由三部分组成:

1.客户端与服务器之间的通信协议

2.存有该资源的服务器名称

3.资源在服务器的具体存放位置

http://www.cnblogs.com/liulongbinblogs/p/11649393.html

http是通信协议

www.cnblogs.com是服务器名称

liulongbinblogs/p/11649393.html是资源在服务器上具体的存放位置

网页中如何请求资源

数据,也是服务器对外提供的一种资源,只要是资源,必须要通过请求-处理-响应的方式进行获取。

如果要在网页中请求服务器上的数据资源,则需要用到XMLHttpRequest对象。

XMLHttpRequest是浏览器提供的js成员,通过它,可以请求服务器上的数据资源。

最简单的用法:var xhr Obj = new XMLHttpRequest()

资源的请求方式

客户端请求服务器时,请求的方式有很多种,最常见的两种请求方式分别为get和post请求

  • get请求通常用于获取服务器资源(向服务器要资源)

例如:根据URL地址,从服务器获取HTML文件,css文件,js文件,图片文件,数据资源等

  • post请求通常用于向服务器提交数据(往服务器发送资源)

例如:登录时向服务器提交的登录信息,注册时向服务器提交的注册信息、添加用户时向服务器提交的用户信息等各种数据提交操作。

了解Ajax

什么是Ajax

Ajax的全称是Asynchrounous And XML(异步JavaScript 和 XML)

通俗的理解,在网页中利用XMLHttpRequest对象和服务器进行数据交互的方式,就是Ajax。

Ajax的典型运用场景

用户名检测:注册用户名时,通过ajax的形式,动态检测用户名是否被占用

搜索提示:当输入关键字时,通过ajax的形式,动态加载搜索提示列表

数据分页显示:当点击页码值的时候,通过ajax的形式,根据页码值动态刷新表格的数据

数据的增删改查:数据的添加,删除,查询操作,都需要通过ajax的形式,来实现数据的交互

jQuery中的ajax

了解jQuery中的ajax

浏览器中提供了XMLHttpRequest用法比较复杂,所以jQuery对XMLHttpRequest进行了封装,提供了一系列ajax相关函数,极大地降低了Ajax的使用难度。

  • $.get()
  • $.post()
  • $.ajax()

$.get()函数的语法

jQuery中$.get函数的功能单一,专门用来发起get请求,从而将服务器上的资源请求到客户端进行使用。

语法:

$.get(url,[data],[callback])

其中,三个参数各自代表的含义如下:

参数名 参数类型 是否必选 说明
url string 要请求的资源地址
data object 请求资源期间要携带的参数
callback function 请求成功时回调的函数
$.get()发起不带参数的请求

使用$.get()函数发起不带参数的请求时,直接提供请求的URL地址和请求成功之后的回调函数即可。

例子:

$.get(‘http://www.liulongbin.top:3006/api/getbooks’,function(res){

​ console.log(res) //这里的res是服务器返回的数据

})

$.get()发起带参数的请求

例子:

$.get(‘http://www.liulongbin.top:3006/api/getbooks’,{id:1},function(res){

​ console.log(res)

})

$.post()函数的语法

jQuery中$.post()函数的功能单一,专门用来发起post请求,从而向服务器提交数据

语法:

$.post(url,[data],[callback])

其中,三个参数各自代表的含义如下:

参数名 参数类型 是否必选 说明
url string 要请求的资源地址
data object 请求资源期间要携带的参数
callback function 请求成功时回调的函数
$.post()向服务器提交数据

例子:

$.post(

‘http://www.liulongbin.top:3006/api/getbooks’, // 请求URL地址

{bookname:‘水浒传’,author:‘施耐庵’,publisher:‘上海图书出版社’}, // 提交数据

function(){ //回调函数

console.log(res)}

)

$.ajax()函数的语法

相比于 . g e t ( ) 和 .get()和 .get().post()函数,jQuery中提供的$.ajax()函数,是一个功能比较综合的函数,它允许我们对Ajax请求进行更详细的配置。

语法:

$.ajax({

type:‘’, //请求的方式,例如GET或POST

url:‘’, //请求的URL地址

data’', //这次请求要携带的数据

success:function(res){} //请求成功之后的回调函数

})

使用$.ajax()发起GET请求

使用$.ajax()发起GET请求时,只需要将type属性的值设置为‘GET’即可。

例子:

$.ajax({

type:‘GET’, //请求方式

url:‘http://www.liulongbin.top:3006/api/getbooks’ ,

data:{id:1},

success:function(res){

console.log(res)

}

})

使用$.ajax发起POST请求时,只需要type属性的值设置为’POST’即可:

例子:

$.ajax({

type:‘POST’, //请求方式

url:‘http://www.liulongbin.top:3006/api/addbook’ ,

data:{bookname:‘水浒传’,author:‘施耐庵’,publisher:‘上海图书出版社’},

success:function(res){

console.log(res)

})

接口

接口概念

使用Ajax请求数据时,被请求的URL地址,就叫做数据接口(简介接口)。同时,每个接口必须有请求方式。

例如:

http://www.liulongbin.top:3006/api/getbooks 获取图书列表的接口(get请求)

http://www.liulongbin.top:3006/api/addbook 添加图书的接口(post接口)

接口测试工具

什么是接口测试工具

为了验证接口是否被正常被访问,我们常常需要使用接口测试工具,来对数据接口进行检测。

好处:接口测试工具让我们在不写任何代码的情况下,对接口进行调用和测试。

接口文档

接口文档,顾名思义就是接口的说明文档,它是我们调用接口的依据。好的接口文档包含了对接口URL,参数以及输出内容的说明,我们参照接口文档就能方便的知道接口的作用,以及接口任何进行调用。

接口文档的组成部分

接口文档包含很多信息,也可以按需进行精简,不过,一个合格的接口文档,应该包含以下6项内容,从而为接口的调用提供依据:

调用提供依据:

1.接口名称:用来标识各个接口的简单说明,如登录接口,获取图书列表接口等。

2.接口URL:接口的调用地址。

3.调用方式:接口的调用方式,如GET和POST。

4.参数格式:接口需要传递的参数,每个参数必须包括参数名称,参数类型,是否必选,参数说明这4项内容。

5.响应格式:接口的返回值的详细描述,一般包含数据名称、数据类型、说明3项内容。

6.返回实例(可选):通过对象的形式,例举服务器返回数据的结构。

重置窗口位置resetui

用resetui()可以重置位置

form表单的基本使用

什么是表单

表单在网页中主要负责数据采集功能。HTML中的

标签,就是用于采集用户输入的信息,并通过标签的提交操作,把采集到的信息提交到服务器端进行处理。

表单的组成部分

表单由三个基本部分组成:

  • 表单标签
  • 表单域

表单域:包含了文本框、密码框、隐藏框、多行文本框、复选框、单选框、下拉选择框和文件上传框等。

  • 表单按钮

标签的属性

标签用来采集数据,标签的属性则是用来规定如何把采集到的数据发送到服务器。

属性 描述
action URL地址 规定当提交表单时,向何处发送表单数据
method get或post 规定以何种方式把表单数据提交到actionURL
enctype application/x-www-form-urlencoded multipart/form-data text/plain 规定在发送表单数据之前如何对其进行编码
target _blank
_self
_parent
_top
framename
规定在何处打开action URL
1.action

action属性用来规定当提交表单时,向何处发送表单数据。

action属性的值应该是后端提供的一个URL地址,这个URL地址专门负责接收表单提交过来的数据。

当表单在未指定action属性的情况下,actiopn的默认值为当前页面的URL地址。

注意:当提交表单后,页面会立即跳转到action属性指定的URL地址。

2.target

target属性用来规定在何处打开action URL。

他的可选值有5个。默认情况下,target的值是_self,表示在相同的框架中打开action URL。

描述
_blank 在新窗口中打开
_self 默认,在相同的框架中打开
_ parent 在父框架集中打开
_top 在整个窗口中打开
framename 在指定的框架中打开
3.method

method属性用来规定以何种方式把表单数据提交到actionURL。

它的可选值有两个,分别是get和post。

默认情况下,method的值为get,表示通过URL地址的形式,把表单数据提交到actionURL。

注意:

get方式适合用来提交少量的、简单的数据。

post方式适合用来提交大量的、复杂的、或包含文件上传的数据。

在实际开发中,表单的post提交方式用的最多,很少用get。使用post方式来提交表单。

4.enctype

enctype属性用来规定在发送表单数据之前如何对数据进行编码。

他的可选值有三个,默认情况下,enctype的值为application/x-www-form-urlencoded,表示在发送前编码所有的字符。

描述
application/x-www-form-urlencoded 在发送前编码所有字符(默认)
multipart/form-data 不对字符编码。
在使用包含文件上传控件的表单,必须使用该值
text/plain 空格转换为’+'加号,但不对特殊字符编码(很少使用)

注意:

在涉及到文件上传的操作时,必须将enctype的值设置为multipart/form-data。

表单的同步提交及缺点

什么是表单的同步提交

通过点击submit按钮,触发表单提交的操作,从而使页面跳转到action URL的行为,叫做表单的同步提交。

2.表单同步提交的缺点

1.表单同步提交后,整个页面会发生跳转。跳转到action URL所指向的地址,用于体验很差。

2.表单同步提交后,页面之前的状态和数据会丢失。

3.如何解决表单同步提交的缺点

解决方案:表单只负责采集数据,ajax负责将数据提交到服务器。

通过Ajax提交表单数据

监听表单提交事件

在jQuery中,可以使用如下两种方式,监听到表单的提交事件:

$(‘#form1’).submit(function(e){

​ alert(‘监听到了表单的提交事件’)

})

$(‘#form1’).on(‘submit’,function(e){

alert(‘监听到了表单的提交事件’)

})

阻止表单默认提交行为

当监听到表单提交事件后,可以调用事件对象的evet.preventDefault()函数,来阻止表单的提交和页面的跳转

$(‘#form1’).submit(function(e){

​ e.preventDefault()

})

$(‘#form1’).on(‘submit’,function(e){

e.preventDefault()

})

快速获取表单中的数据

serialize()函数

为了简化表单中数据获取的操作,jQuery提供了serialize()函数

语法:

$.(selector).serialize()

serialize()函数的好处:可以一次性获取到表单所有的数据。

注意:在使用serialize()函数快速获取表单数据时,必须为每个表单元素添加name属性。

重置表单的方法

$(‘form’)[0].reset()

模板引擎的基本概念

渲染UI结构时遇到的问题

通过字符串拼接的形式,来渲染UI结构。如果UI结构比较复杂,则拼接字符串的时候需要格外注意引号之前的嵌套。且一旦需求发生变化,修改起来也非常麻烦。

什么是模板引擎

模板引擎,顾名思义,它可以根据程序员指定的模板结构和数据,自动生成一个完整的HTML页面。

模板引擎的好处

1.减少了字符串的拼接操作

2.使代码结构更清晰

3.使代码更易于阅读和维护

art-template模板引擎

art-template简介

art-template是一个简约、超快的模板引擎。

art-template模板引擎的基本使用

1.导入art-template

2.定义数据

3.定义模板

将script的type属性改为text/html

4.调用template函数

语法:

template(‘模板的ID’,需要渲染的数据对象)

数据会自动填充到{{name}}占位符中

5.渲染HTML页面

art-template标准语法

什么是标准语法

art-template提供{{}}这种语法格式,在{{}}内可以进行变量输出,或循环数组等操作,这种{{}}语法在art-template中被称为标准语法

标准语法-输出

{{value}}

{{obj.key}}

{{obj.[‘key’]}}

{{a?b:c}}

{{a||b}}

{{a+b}}

在{{}}语法中,可以进行变量的输出、对象属性的输出、三元表达式的输出、逻辑或输出、加减乘除等表达式的输出。

标准语法-原文输出

语法:

{{@ value}}

如果要输出的value值中,包含了HTML标签结构,则需要使用原文输出的语法,才能保证HTML标签被正常渲染。

标准语法-条件输出

如果要实现条件输出,则可以在{{}}中使用if…else if…/if的方式,进行按需求输出。

语法:

{{if value}}按需输出的内容{{/if}}

{{if v1}}按需输出的内容{{else if v2}}按需输出的内容{{/if}}

标准语法-循环输出

如果要实现循环输出,则可以在{{}}内,通过each语法循环数组,当前循环的索引使用 i n d e x 进 行 访 问 , 当 前 的 循 环 项 使 用 index进行访问,当前的循环项使用 index访使value进行访问。

{{each arr}}

{{KaTeX parse error: Expected 'EOF', got '}' at position 6: index}̲}{{value}}

{{/each}}

标准语句-过滤器

语法:

{{value|filterName}}

过滤器语法类似管道操作符,它的上一个输出作为下一个输入。

定义过滤器的基本语法如下:

template.defaults.imports.filterName = function(value){/*return处理的结果/}

例子:

注册时间:{{regTime|dateFormat}}

定义一个格式化时间过滤器dateFormat如下:

template.defaults.imports.dateFormat = function(date){

var y = date.getFullYear()

var m = date.getMonth()+1

var d = date.getDate()

return y+‘-’+m+‘-’+d// 注意,过滤器最后一定要return一个值

}

模板引擎的实现原理

正则与字符串操作

基本语法

exec()函数用于检索字符串中的正则表达式的匹配。

如果字符串中有匹配的值,则返回该匹配值,否则返回null

RegExpObject.exec(string)

分组

正则表达式中()包起来的内容表示一个分组,可以用过分组来提取自己想要的内容。

例子:

var str = ‘

我是{{name}}

var pattern = /{{[a-zA-Z]+}}/

var patternResult = pattern.exec(str)

console.log(patternResult)

字符串的replace函数

replace()函数用于在字符串中用一些字符替换另一些字符。

语法:

var result = ‘123456’.replace(‘123’,‘abc’)

replace替换为真值

例子:

var data = { name: ‘张三’, age: 18 }

​ var str = ‘我是{{name}},今年{{age}}’

​ var pattern = /{{([a-zA-Z]+)}}/

​ var patternResult = null;

​ while (patternResult = pattern.exec(str)) {

​ var result = pattern.exec(str);

​ str = str.replace(result[0], data[result[1]])

​ }

​ console.log(str);

Ajax加强

XMLHttpRequest的基本使用

什么是XMLHttpRequest

XMLHttpRequest简称xhl,是浏览器提供的JavaScript对象,通过它,可以请求服务器上的数据资源。之前所学的jQuery中的ajax函数,就是基于xhr对象函数封装出来的。

使用xhr发起GET请求

步骤:

1.创建xhr对象

var xhr = new XMLHttpRequest

2.调用xhr.open()函数

xhr.open(‘get’,‘http://www.liulongbin.top:3006/api/getbooks’)

3.调用xhr.send()函数

xhr.send()

4.监听xhr.onreadystatechange事件

xhr.onreadystatechange = function(){

xhr对象的响应状态是4,服务器响应状态是200

​ if (xhr.readyState === 4&& xhr.status ===200){

​ console.log(xhr.responseText);

}

}

了解xhr对象的readyState属性

XHLHttpRequest对象的readyState属性,用来表示当前ajax请求所处的状态。每个ajax请求必然处于以下状态中的一个:

状态 描述
0 UNSENT XMLHttpRequest对象以及被创建,但尚未调用open方法
1 OPENED open()方法已经被调用
2 HEADERS_RECEIVED send()方法已经被调用,响应头也已经被接收
3 LOADING 数据接收中,此时response属性中已经包含部分数据
4 DONE ajax请求完成,这意味着数据传输已经彻底完成或失败

使用xhr发起带参数的get请求

// …

xhr.open(‘get’,‘http://www.liulongbin.top:3006/api/getbooks?id=1’)

//…

这种在URL地址后面拼接的字符串,叫查询字符串

查询字符串

什么是查询字符串

定义:查询字符串(URL参数)是指在URL的末尾加上用于服务器发送信息的字符串(变量)

格式:将英文的?放在URL的末尾,然后再加上参数=值,想加上多个参数的话,使用&符号进行分隔。以这个形式,可以将想要的发送给服务器的数据添加URL中。

get请求携带参数的本质

无论使用 . a j a x ( ) , 还 是 使 用 .ajax(),还是使用 .ajax(),使.get(),又或者直接使用xhr对象发起get请求,当需要携带参数的时候,本质上,都是直接将参数以查询字符串的形式,追加到URL地址的后面,发送到服务器的。

$.get(‘url’,{name:‘zs’,age:20},function(){})

等价于

$.get(‘url?name=zs&age=20’,function(){})

$.ajax({method:‘get’,url:‘url’,data:{name:‘zs’,age:20},success:function(){}})

等价于

$.ajax({method:‘get’,url:‘url?name=zs&age=20’,success:function(){}})

URL编码与解码

什么是URL编码

URL地址中,只允许出现英文相关的字母、标点符号、数字,因此,在URL地址中不允许出现中文字符。

如果URL中需要包含中文这样的字符,则必须对中文字符进行编码(转译)

URL编码的原则:使用安全的字符(没有特殊用途或者特殊意义的可以打印字符)去表示那些不安全的字符。

简单来说就是用英文字符去表示非英文字符。

任何对URL进行编码和解码

浏览器提供了URL编码和解码的API,分别是

  • encodeURI()编码的函数
  • decodeURI()解码的函数
URL编码的注意事项

由于浏览器会自动对URL地址进行编码操作,因此,大多数情况下,程序员不需要关心URL地址的编码与解码操作。

使用xhr发起POST请求

步骤:

1.创建xhr对象

2.调用xhr.open()函数

xhr.open(‘post’,‘http://www.liulongbin.top:3006/api/addbook’)

3.设置Content-Type属性(固定写法)

xhr.setRequestHeader(‘Content-Type’,‘application/x-www-form-urlencoded’)

4.调用xhr.send()函数,同时指定要发送的数据

xhr.send(‘bookname=水浒传&author=施耐庵&publisher=天津图书出版社’)

5.监听xhr.onreadystatechange事件

xhr.onreadystatechange = function(){

xhr对象的响应状态是4,服务器响应状态是200

​ if (xhr.readyState === 4&& xhr.status ===200){

​ console.log(xhr.responseText);

}

}

数据交互格式

什么是数据交互格式

数据交互格式,就是服务器端与客户端之间进行数据传输与交换的格式。

前端领域,经常提及的两种格式分别是XML和JSON。其中XML用的很少,主要是用JSON.

XML

什么是XML

XML的英文全称是EXtensible Markup Language,即可扩展标记语言。因此,XML和HTML类似,也是一种标记语言。

ls //发给谁

zs //谁发送

通知 //标题

晚上开会 //内容

XML和HTML的区别
  • HTML被设计用来描述网页上的内容,是网页内容的载体
  • XML被设计用来传输和储存数据,是数据的载体
XML的缺点

1.XML格式臃肿,和数据无关的代码多,体积大,传输效率低

2.在JavaScript中解析XML比较麻烦

JSON

什么是JSON

概念:JSON的英文全称是JavaScript Object Notation,即’JavaScript对象表示法’。简单来讲,JSON就是JavaScript对象和数组的字符串表示法,它使用文本表示一个JS对象或数组的信息,因此,JSON的信息是字符串。

作用:JSON是一种轻量级的文本数据交换格式,在作用上类似于XML,专门用于储存和数据传输,但是JSON比XML更小,更快,更易解析。

现状:JSON是在2001年被推广和使用的数据格式,如今,JSON已经成为主流的数据交换格式。

JSON的两种结构

JSON就是用字符串来表示JavaScript的对象和数组。所以,JSON中包含对象和数组两种结构,通过这两种结构的相互嵌套,可以表示各种复杂的数据结构。

  • 对象结构:对象结构在JSON中表示{括起来的内容,数据结构为{key:value,key:valye,…}的键值对结构。其中,key必须是使用英文的双引号包括起来的字符串,value的数据类型可以是数组、字符串、布尔值、null、数组、对象6种类型。

  • 数组结构:数组结构在JSON中表示[]括起来的内容,数据结构为[“java”,“javascript”,30,true].数组中数据的类型可以是数字、字符串、布尔值、null、数组、对象6种类型。

JSON语法的注意事项

1.属性名必须使用双引号包裹

2.字符串类型的值必须使用双引号包裹

3.JSON中不允许使用单引号表示字符串

4.JSON中不能写注释

5.JSON的最外层必须是对象或数组的格式

6.不能使用undefined或函数作为JSON的值

JSON的作用:在计算机和网络之间存储和传输数据

JSON的本质:用字符串来表示JavaScript对象数据或数组数据

JSON和JS对象的关系

JSON是JS对象的字符串表示法,它使用文本表示一个JS对象信息,本质是一个字符串,例如:
//这是一个对象

var obj = {a:‘hello’,b:‘word’}

//这是一个JSON字符串,本质是一个字符串

var json = ‘{“a”:“hello”,“b”:“world”}’

JSON和JS对象的互转

要实现从JSON字符串转化为JS对象,使用JSON.parse()方法:

var obj = JSON.parse(‘{“a”:“hello”,“b”:“world”}’)

结果是{a:‘hello’,b:‘world’}

要实现JS对象转化为JSON字符串,使用JSON.stringify()方法:

var obj = JSON.stringify({a:‘hello’,b:‘world’})

结果是’{“a”:“hello”,“b”:“world”}’

序列化和反序列化

把数据对象转化为字符串的过程,叫做序列化,例如:调用JSON.stringify()函数的操作,叫做JSON序列化。

把字符串转化为数据对象的过程,叫做反序列化,例如:调用JSON.parse()函数的操作,叫做JSON反序列化。

封装自己的ajax函数

定义options参数选项

itheima()函数是我们自定义的ajax函数,它接收一个配置对象作为参数,配置对象中可以配置如下属性:

  • method 请求类型
  • url 请求的URL地址
  • data 请求携带的数据
  • success 请求成功之后的回调函数

处理data参数

需要把data对象,转化成查询字符串的格式,从而提交给服务器,因此提前定义resolveData函数

判断请求的类型

不同的请求类型,对应xhr对象的不同操作,因此需要对请求类型进行if…else…的判断

XMLHttpRequest Level2的新特性

旧版XMLHttpRequest的缺点

1.只支持文本数据的传输,无法用来读取和上传文件

2.传送和接收数据时,没有进度信息,只能提示有没有完成。

XMLHttpRequest Level2的新功能

1.可以设置HTTP请求的时限

2.可以使用FormData对象管理表单数据

3.可以上传文件

4.可以获得数据传输的进度信息

设置HTTP请求时限

有时,Ajax操作很耗时,而且无法预知要花多少时间。如果网速很慢,用户可能要等很久。新版本的XMLHttpRequest对象,增加了timeout属性,可以设置HTTP请求的时限:

语法:

xhr.timeout = 3000

上面的语句,将最长等待时间设为3000毫秒,过了这个时限,就自动停止HTTP请求。与之配套的还有一个timeout事件,用来指定回调函数:

xhr.ontimeout = function(){

​ alert(‘请求超时’)

}

FormData对象管理表单数据

Ajax操作往往用来提交表单数据。为了方便表单数据的处理,HTML5新增了一个FormData对象,可以模拟表单操作:

新建FormData对象

var fd = new FormData()

为FormData添加表单项

fd.append(‘uname’,‘zs’)

fd.append(‘upwd’,‘123456’)

创建XHR对象

var xhr = new XMLHttpRquest()

指定请求类型和URL地址

xhr.open(method,url)

直接提交FormData对象,这与提交网站表单的效果,完全一样。

xhr.send(fd)

FormData对象管理表单数据

FormData对象也可以用来获取网页表单的值,示例如下:

var form = document.querySelector(‘#form1’)

form.addEventListener(‘submit’,function(e){

e.preventtDefault()

var fd = new FormData(form)

var xhr = new XMLHttpRequest()

xhr.open(‘post’,url)

xhr.send(fd)

xhr.onreadystatechange = function(){

}

})

上传文件

新版XMLHttpRequest对象,不仅可以发送文本信息,还可以上传文件。

实现步骤:

1.定义UI结构

2.验证是否选择了文件

3.向FormData中追加文件

显示文件的上传进度

新版本中的XMLHtppRequest对象中,可以通过监听xhr.upload.onprogress事件,来获取到文件的上传进度。

语法:

var xhr = new XMLHttpRequest()

xhr.upload.onprogress = function(e){

if (e.lengthComputable){

e.lengthComputable是一个布尔值,表示当前上传的资源是否具有可计算的长度

e.loaded 已经传输的字节

e.total 需传输的总字节

var percentComplete = Math.ceil((e.loaded/e.total)*100)

}

}

jQuery实现文件上传

jQuery中的ajax上传文件时,contentType和processData都要false

jQuery实现loading效果

ajaxStart(callback)

ajax请求开始时,执行ajaxStart函数。可以在ajaxStart的callback中显示loading效果,示例代码如下:

$(document).ajaxStart(function(){

​ $(‘#loading’).show()

})

注意:$(document).ajaxStart()函数会监听当前文档内所有的Ajax请求。

ajaxStop(callback)

Ajax请求结束时,执行ajaxStop函数。可以在ajaxStop的callback中隐藏loading效果,示例代码如下:

$(document).ajaxStop(function(){

​ $(‘#loading’).hide()

})

axios

什么是axios

Axios是专注于网络数据请求的库

相比于原生的XMLHttpRequest对象,axios简单易用。

相比于jQuery,axios更加轻量化,只专注于网络数据请求。

axios发起get请求的语法:

axios.get(‘url’,{params:{/* 参数 */}}).then(callback)

axios发起POST请求

axios发起post请求的语法:

axios.post(‘url’,{params:{/* 参数 */}}).then(callback)

直接使用axios发起请求

axios也提供了类似于jQuery中$.ajax()的函数,语法如下:

axios({

method:‘请求类型’,

url:‘请求的URL地址’,

data:{POST数据},

params:{get参数}

}).then(callback)

跨域和JSONP

同源策略

什么是同源

如果两个页面的协议,域名和端口都相同,则两个页面具有相同的源。

什么是同源策略

同源策略是浏览器提供的一个安全功能。

同源策略限制了从一个源加载的文档或脚本如何来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。

简单来说,浏览器规定,A网站的JavaScript,不允许和非同源的网站C之间,进行资源的交互,例如:

1.无法读取非同源网页的cookie,localstorage和indexedDB

2.无法接触非同源网页的DOM

3.无法向非同源地址发送ajax请求

跨域

什么是跨域

同源指的是两个URL的协议、域名、端口一致,反之,则是跨域。

出现跨域的根本原因:浏览器的同源策略不允许非同源的URL之间进行资源的交互。

浏览器对跨域请求的拦截

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ONSqMFR-1631290767612)(C:\Users\11091\Desktop\1.png)]

注意:浏览器允许发起跨域请求,但是,跨域请求回来的数据,会被浏览器拦截,无法被网页获取到。

如何实现跨域数据请求

现如今,实现跨域数据请求,最主要的两种解决方案,分别是JSONP和CORS。

JSONP:出现的早,兼容性好。是前端程序员为了解决跨域问题,被迫想出来的一种临时解决方案。缺点是只支持GET请求,不支持POST请求。

CORS:出现的比较晚,它是W3C标准,属于跨域ajax请求的根本解决方案。支持get和post请求。缺点是不兼容某些低版本的浏览器。

JSONP

什么是JSONP

JSONP是JSON的一种’使用模式’,可用于解决主流浏览器的跨域数据访问的问题。

JSONP的实现原理

由于浏览器同源策略的限制,网页中无法通过ajax请求非同源的接口数据。但是

你可能感兴趣的:(ajax)