- 首先对ajax的认识,我们要明白他是对数据库的一个请求,就是把数据库里的数据拿到script脚本里面,然后再渲染到我们需要的页面,所以它不是另一种语言,是一个由JS敲出来的公式
- 那么ajax可以用来干什么?基本就是用来增删改查,我们对页面的数据都需要从后台获取
那么进入正题,ajax是什么样子的?
首先是原生JS里面的:
四部曲
// 1.创建
// 兼容性的处理
var xhr;
if (window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
// 2.监听函数
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status == 200){
// 完成以后,并且成功的ajax请求
}else{
console.log("发生错误的响应码:" + xhr.status)//ajax请求已经完成,但是发生了错误
}
}
}
// xhr.readyState ajax请求的状态码
0
1
2
3
4
// xhr.status ajax请求完成以后的响应码
1xx
2xx
3xx 301 304
4xx
5xx
这里是GET请求
// 3.建立连接 注意点:get请求的参数位置 在地址栏之后拼接的
xhr.open("GET",地址?参数名1=参数值1&参数名2=参数值2....,true)
// 4.发送请求
xhr.send(null)
这里是POST请求
// 3.建立连接 post请求的参数不需要拼接
xhr.open("POST","02.php",true);
// 3.5 设置一个请求头
// post请求在发送之前,得把post请求的参数格式指定一下
// text/html
// multipart/form-data
// multipart/json
// application/x-www-form-urlencoded
// ...
xhr.setRequestHeader("content-type","application/x-www-form-urlencoded")
// 4.发送 post请求的参数写在send中
// key1=value1&key2=value2
xhr.send("username=jack&score=100")
可能看上去很麻烦,也不好理解,不过没关系,我们还有jQuery版的
相比原生这个就好理解的多
$.ajax({
// GET或POST请求
type: 'GET', //'POST'
// 请求地址路径
url: 'http://127.0.0.1/admin/index/',
// 请求的媒体类型,一般不写
contentType: 'application/x-www-form-urlencoded;charset=utf-8',
// 转为json格式
dataType: 'JSON',
// 异步改同步,默认为true,也就是异步,一般不去改变
async: false,
// 请求成功
success: function(data) {
console.log(data); //获取到的后台数据
},
// 请求失败
error: function(err) {
console.log(err); //获取到的失败结果
}
})
至于增删改查,我们只需要把数据传到后台就行,那都是后台的事
大致的ajax实例就是这样,但是对ajax仅仅了解这些还远远不够
任何东西都有两面性,ajax也不例外,虽然方便了请求后台数据,但也有了些微的缺点
AJAX优点:
- 无刷新更新数据
- 异步服务器通信
- 前端和后端负载平衡
- 基于标准备广泛支持
- 界面与应用分离
AJAX缺点:
- AJAX干掉了Back和History功能,即对浏览器机制的破坏
- AJAX安全问题
- 对搜索引擎支持较弱
- 破坏程序的异常处理机制
- 违背了URL和资源定位的初衷
- AJAX不是很好支持移动设备
AJAX注意点及适用和不适用场景
(1)注意点
Ajax 开发时,网络延迟——即用户发出请求到服务器发出响应之间的间隔——需要慎重考虑。不给予用户明确的回应,没有恰当的预读数据,或者对 XMLHttpRequest的不恰当处理,都会使用户感到延迟,这是用户不希望看到的,也是他们无法理解的。通常的解决方案是,使用一个可视化的组件来 告诉用户系统正在进行后台操作并且正在读取数据和内容。
(2).Ajax适用场景
<1>.表单驱动的交互
<2>.深层次的树的导航
<3>.快速的用户与用户间的交流响应
<4>.类似投票、yes/no等无关痛痒的场景
<5>.对数据进行过滤和操纵相关数据的场景
<6>.普通的文本输入提示和自动完成的场景
(3).Ajax不适用场景
<1>.部分简单的表单
<2>.搜索
<3>.基本的导航
<4>.替换大量的文本
<5>.对呈现的操纵