我想如果使用过购物网站的话,想象一个场景,你在淘宝上看中一件物品,想加入购物车,但是呢,你点击添加购物车后,整个页面刷新了,你之前看的物品记录也没有了,这样是不是很烦(这是因为没有使用ajax更新数据时会请求整个页面的数据,重新渲染)。碰到这种情况,ajax就出场了,有了它,我们可以在点击添加商品后,只更新购物车中的物品数量就可以了,根本就不需要更新整个页面,用官方一点的话来说,就是可以控制网页的局部刷新。
1、创建一个异步对象
const xmlhttp = new XMLHttpRequest();
2、设置请求方式和请求地址
xmlhttp.open(type,url,true);
3、发送请求
xmlhttp.send();
4、监听状态的变化
xmlhttp.onreadystatechange = function (){
if (xmlhttp.readyState === 4) {
//处理返回的结果
}
}
5、处理返回的结果
if (xmlhttp.status >= 200 && xmlhttp.status < 300 || xmlhttp.status === 304) {
console.log(xmlhttp.responseText);
} else {
console.log("没有接收到服务器返回的数据");
}
1、创建一个异步对象
//1、创建一个异步对象
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
2、设置请求方式和请求地址
//2、设置请求方式和请求地址
// 注意:在post方式中url后面不能加参数
xmlhttp.open("POST", "ajax-post.php", true);
3、添加参数*和发送请求
//3、添加参数
//如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。
//然后在 send() 方法中规定您希望发送的数据:
//此方法必须在open() 方法和 send() 之间调用
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("userName=ljm&userPwd=123456");
4、监听状态的变化
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4) {
//code...
}
}
5、处理返回的结果
if (xmlhttp.status >= 200 && xmlhttp.status < 300 || xmlhttp.status === 304) {
console.log(xmlhttp.responseText);
}
else {
console.log("没有接收到服务器返回的数据");
}
//1、创建一个异步对象
//检查浏览器是否支持 XMLHttpRequest 对象
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
//2、设置请求方式和请求地址
//解决IE缓存:在IE浏览器中如果通过Ajax发送起GET请求,那么IE浏览器认为同一个URL只有一个结果
xmlhttp.open("GET","ajax-get.txt?t=" + Math.random(),true);
//3、发送请求
xmlhttp.send();
//4、监听状态的变化
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4) {
if (xmlhttp.status >= 200 && xmlhttp.status < 300 || xmlhttp.status === 304) {
console.log(xmlhttp.responseText);
} else {
console.log("没有接收到服务器返回的数据");
}
}
}
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
// 在post方式中url后面不能加参数
xmlhttp.open("POST", "ajax-post.php", true);
//如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。
//然后在 send() 方法中规定您希望发送的数据:
//setRequestHeader方法必须在 open() 方法和 send() 之间调用
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("userName=ljm&userPwd=123456");
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4) {
if (xmlhttp.status >= 200 && xmlhttp.status < 300 || xmlhttp.status === 304){
console.log(xmlhttp.responseText);
} else {
console.log("没有接收到服务器返回的数据");
}
}
}
1、方法:
2、属性:
http状态码是指服务器接收到请求后返回的一个状态码,而对象的状态值,是针对XmlHttpRequest对象的
Ⅱ、GRT请求和POST请求的不同
1、同步方式发送请求
发送一个请求,需要等待响应返回,然后才能够发送下一个请求,如果该请求没有响应,不能发送下一个请求,客户端会处于一直等待过程中。
同步请求:客户端提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
举个例子: 例如中午食堂吃饭: 同步就是男生请女生去吃饭,女生一开始是拒绝和你吃饭;你就不停的邀请她…一直等待…连菜都不敢点,直到对方同意..,才一起去吃饭,期间不能离开.
上述场景: 适用于准情侣或者情侣!
2、异步方式发送请求
发送一个请求,不需要等待响应返回,随时可以再发送下一个请求,即不需要等待。
异步: 客户端请求通过事件触发->服务器处理(此时浏览器仍然可以作其他事情)->服务器处理完毕,异步的给予浏览器响应。
直白的说吧: 异步就是老公叫老婆吃饭,此时老婆可能在忙,那么老公此时可能没等老婆回复,就开始下单,点菜…等老婆回复时,此时菜饭已经点好了,开吃吧。
上述场景:适用于老夫老妻.
1、可以看出,所谓的Ajax就是发起一个http请求。
2、使用JavaScript在指定的位置,显示响应数据,从而局部修改页面的数据,达到局部刷新目的
3、服务器响应数据给ajax引擎AJAX引擎获得服务器响应的数据,通过执行JavaScript的回调函数将数据更新到浏览器页面具体位置。