jQuery基础——Ajax

写在前面

参考文献:莫振杰《从0到1:jQuery快速上手》

这次讲讲Ajax。

Ajax简介

Ajax,全称"Asynchronous JavaScript and XML",也就是"异步的JavaScript和XML"。

Ajax核心是通过JS的XMLHttpRequest对象,以异步的方式向服务器发送请求数据,并且通过该对象接收请求返回的数据,从而实现客户端与服务器端的数据操作。

Ajax的优势:能够刷新指定的页面区域,而不是刷新整个页面,从而减少客户端和服务器端之间传输的数据量,提高页面速度,提高用户体验。

Ajax方法

Ajax下面有很多方法,下面展开详细说说。

load()方法

这个方法有啥用呢?

解析出Ajax请求中服务器返回的数据,然后将其插入到指定的元素中。

语法:$().load(url, data, fn)

url是Ajax请求地址,是必选参数;data表示发送到服务器的数据,是可选参数;fn表示请求完成之后的回调函数,是可选参数。

由于浏览器安全限制,大多数的Ajax请求遵循着"同源策略",也就是说跨域请求会被拦截------Ajax请求无法从不同的域、子域或协议中获取数据。

普通情况

一般情况下,load()方法都是用于加载某一个文件的内容,例如:txt、html、php文件。

传递数据

通常情况下,我们可以使用load()方法向服务器发送数据,也就是通过data向服务器发送数据。

如果data省略,就会采用get()方式向服务器发起请求;如果data不省略,就会采用post()方法向服务器发起请求。

注意:data一般是"键值对"的格式。

get和post的区别:

一般来说,get和post都能够向服务器获取数据。

但是,post方法一般更加安全,而get方法安全性略低。

回调函数

load()方法中的第三个参数就是一个回调函数,表示请求完成之后执行的代码。

语法:

javascript 复制代码
$().load(url, data, function(response, status, xhr) { ... })

response表示"请求后返回的内容",status表示"请求状态",xhr表示"XMLHttpRequest对象"。

特别注意

1.在load()方法中,不管Ajax请求是否成功,只要请求完成了,回调函数(fn)都会被触发。

2.load()方法一般只会用到第一个,很少会用第二、第三个。

3.load()方法一般用来向服务器请求静态的数据文件。在实际开发中,如果需要传递参数给服务器,应该使用.get()方法、.post()方法、$.ajax()方法。

$.get()方法

作用:向服务器发送请求获取数据。

语法:$.get(url, data, fn, type)

注意,这里的方法调用的对象,是jQuery,而不是通过选择器获取到的JQ对象。

url,必选参数,请求地址。

data,可选参数,请求数据。

fn,可选参数,请求成功后的回调函数。

type,可选参数,服务器返回的内容格式。

注意,这里的fn是请求成功后 的回调,不是请求完成后的回调。

参数type返回的内容格式:text、html、xml、json、Script、default。

$.post()方法

上面说过,post和get方法的区别其实不大,这里再说一下区别:

get方法安全性低,不适合大数据量。

post方法则没有以上问题。

OK,下面开始介绍$.post()方法。

语法:$.post(url, data, fn, type)

参数同get()方法,这里不再重复。

$.getJSON()方法

获取服务器中JSON格式的数据。

语法:

javascript 复制代码
$.getJSON(url, data, function(data) { ... })

$.getJSON()是一个全局方法,是直接定义在JQ对象下的方法。

url不作解析,重点说说data。

可以看出一共有两个data,只不过第一个data是getJSON()方法里面的一个参数,而第二个data则是回调函数里面的参数。

第一个data跟之前的是一样的,都是发送到服务器端的数据,数据也是按照键值对的形式来传递的;第二个data表示请求成功后返回的数据。

$.getScript()方法

这是一个用于动态加载JS的方法。

当网站需要加载大量的JS文件时,动态加载JS是一个比较好的优化性能手段。

语法:$.getScript(url, fn)

参数解读参考上述文案。

优势:

异步跨域加载JS文件。

需要的时候再加载,减少服务器和客户端的负担,加快页面响应。

第二个优点是不是跟页面懒加载很像?

疑问:每次执行调用JS文件的时候,是不是都回去请求一次这个JS文件?这不是压力更大吗?

其实$.getScript()方法是对Ajax()方法的一个封装,可以使用Ajax()方法的缓存来将http装填从200改为304,从而使用客户端的缓存。

$.ajaxSetup({

cache: true

})

这个ajax()方法是啥?

$.ajax()方法

其实上面介绍的五种方法都是纠结$.ajax()方法实现的,只不过这些方法性能更好而已(因为ajax()方法封装了很多功能)。

语法:$.ajax(options)

这里的options在之前说过了,有人想起来吗?

这个options其实就是一个对象,内部采用键值对的形式传值。

常用的参数:

|------------|--------------------------------|
| url | 请求地址 |
| type | 数据请求方式,get/post,默认是get |
| data | 发送到服务器的数据,可以是字符串或对象 |
| dataType | 服务器返回的数据类型,如:text、html、script等 |
| beforeSend | 发送请求前可以修改XMLHttpRequest对象的函数 |
| complete | 请求完成的回调函数 |
| success | 请求成功的回调函数 |
| error | 请求失败的回调函数 |
| timeout | 请求超时时间,单位是毫秒 |
| global | 是否响应全局事件,默认true |
| async | 是否为异步请求,默认true |
| cache | 是否进行页面缓存,true表示缓存,false表示不缓存 |

使用.ajax()代替.getJSON():

$.ajax({

url: "getJSON()中的URL",

type: "get",

dataType: "json",

success: function(data) { ... }

})

是不是很麻烦?

所以说,术业有专攻。

写在最后

短短两千字,是无法表达出ajax的魅力的,如果需要深究,建议多去看书籍。

一些基础的知识也没有提到,没有什么基础学起来是比较费劲的。

相关推荐
Book_熬夜!26 分钟前
速通HTML
前端·html
wangtaohappy36 分钟前
AI写代码工具赋能前端开发:高效学习与应用AI前端框架
前端·人工智能·学习·前端框架
澄江静如练_1 小时前
小程序高度问题&背景scss
java·前端·小程序
wangtaohappy1 小时前
AI写代码工具ScriptEcho:赋能数据分析,驱动精准营销
前端·人工智能·信息可视化·数据分析
念九_ysl1 小时前
HTML使用 Vue 3 和 Element Plus 实现图片上传功能
前端·javascript·vue.js
补三补四2 小时前
html中的元素(1)
前端·javascript·html
Warren982 小时前
Css3重点知识讲解
开发语言·前端·css·笔记·学习·css3·html5
前端互助会2 小时前
深入理解 CSS pointer-events: none:穿透点击的魔法
前端·css
勘察加熊人2 小时前
angular简易计算器
前端·javascript·angular.js
zpjing~.~2 小时前
CSS 使用white-space属性换行
前端·css