1、AJAX定义
AJAX全称Asynchronous Javascript And Xml,异步的JS和XML。通过JS异步的向服务器发送请求并接收响应。
同步和异步的区别:
- 同步:客户端向服务器发送请求,在收到响应之前,客户端一直等待。
- 异步:客户端发送请求时,在收到响应之前,客户端可以做其他操作,无需一直等待。
异步请求常用的场景如下:
2、异步对象
异步对象XMLHttpRequest是AJAX的核心对象,可以代替浏览器向服务器发送异步请求并接收响应。
2.1、创建异步对象xhr
<script>
if(window.XMLHttpRequest){
var xhr = new XMLHttpRequest();
}else{
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
</script>
2.2、xhr的成员
2.2.1、方法
1、open(method,url,async):创建请求
参数:method请求方式,'get'/'post';url请求地址;async是否异步,ture异步/false同步
示例:xhr.open('post','/search',true)
2、send(body):发送请求
参数:post请求时,body为请求数据;get请求时,不用带参数
2.2.2、属性
1、readyState:请求状态,标识当前xhr对象处于什么状态,共有如下5个状态:
0:代理被创建,但尚未初始化,未调用open()方法
1:已调用open()方法,尚未调用send()方法
2:已调用send()方法,尚未收到响应数据
3:接收响应中,已收到部分响应数据
4:完成,已收到全部响应数据。(常用)
2、responseText:响应数据
3、status:响应状态码
200:正常响应
404:请求的资源不存在
500:服务器内部错误
2.2.3、回调函数
onreadystatechange:回调函数,当xhr的readyState发生变化时出发的操作
2.3、xhr请求步骤
1、创建xhr对象
2、创建请求
3、设置回调函数
4、发送请求
示例如下:
GET请求:
var xhr = new XMLHttpRequest();
xhr.open('get', '/search?name=a&type=b', true);
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
var res = xhr.responseText
}
}
xhr.send();
POST请求:
var xhr = new XMLHttpRequest();
xhr.open('post', '/search', true);
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
var res = xhr.responseText
}
}
xhr.setRequestHeader('content-Type', 'application/x-www-form-urlencoded');
xhr.send(body);
3、JQuery支持AJAX
3.1、$.get()
通过get方式发送异步请求
语法如下:
$.get( URL [, data ] [, callback ] [, dataType ] )
示例:
前端:
<button id="btn">GET请求</button>
<div id="show"></div>
<script>
$(function() {
var data = {name: "xxx", age:20};
$("#btn").click(function() {
$.get('/index/get', data, function(params) {
console.log(params);
msg = 'name is ' + params.name;
msg += ', age is ' + params.age;
$("#show").html(msg);
}, 'json')
})
})
</script>
后端返回:
{"name": "abc", "age": 18}
点击按钮后结果如下:
name is abc, age is 18
3.2、$.post()
同$.get(),示例如下:
前端:
{% csrf_token %}
<div>
name:<input type="text" id="name">
</div>
<div>
password:<input type="password" id="pwd">
</div>
<div>
<button id="btn">提交</button>
</div>
<script>
$(function() {
$("#btn").click(function() {
var data = {
name: $("#name").val(),
password: $("#pwd").val(),
csrftoken: $("[name=csrfmiddlewaretoken]").val()
};
$.post("/index/post", data, function(params) {
console.log(params);
}, 'json');
})
})
</script>
3.3、$.ajax()
$.ajax()参数为对象,对象中的属性说明示例如下:
<button id="btn">提交</button>
<div id="wait" hidden><span>请等待...</span></div>
$(function() {
$("#btn").click(function() {
$.ajax({
url: '/index/ajax',
type: 'get',
data: null,
dataType: 'json',
async: true,
success: function(params) {
console.log(params);
$("#btn").removeAttr('disabled');
$("#wait").css("display", "none");
},
error: function() {
alert("服务器异常!");
$("#btn").removeAttr('disabled');
$('#wait').hide();
},
beforeSend: function() {
$("#btn").attr('disabled', 'disabled');
$('#wait').show();
}
})
})
})
|