AJAX
一、ajax定义
Ajax即Asynchronous Javascript And XML(异步JavaScript和XML)在 2005年被Jesse James Garrett提出的新术语,用来描述一种使用现有技术集合的‘新’方法,包括: HTML 或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的XMLHttpRequest。 使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。
Ajax 的核心是 js 对象:XMLHttpRequest。
二、同步和异步
同步和异步的概念(这跟字面意思完全相反)
-
同步:必须等待前面的任务完成,才能继续后面的任务(一个一个做,不能同时做多个)。
-
异步:不受当前任务的影响(同时做多个事情)。
拿排队举例:
-
同步:在银行排队时,只有等到你了,才能够去处理业务。
-
异步:在排队的时候,可以听听音乐,可以看看书。
异步更新网站
我们以前访问一个网站时,当浏览器加载完HTML、CSS、JS以后,网站的内容就固定了。如果想让网站内容发生更改,就必须刷新页面才能够看到更新的内容。
可如果用到异步更新,情况就大为改观了。比如,我们在访问新浪微博时,看到一大半了,点击底部的加载更多,会自动帮我们加载更多的微博,同时页面并没有刷新。
三、发送 Ajax 请求的五个步骤
(一)创建Ajax对象,也就是XMLHttpRequest对象;
(二)设置请求类型、请求地址和是否异步;
(三)发送请求和请求参数;
(四)监听请求状态变化,我们需要写一些逻辑来处理不同状态下要做的事情;
(五)接收返回的数据。
四、请求类型
- GET,例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>Ajax 发送 get 请求</h1>
<input type="button" value="发送get_ajax请求" id='btnAjax'>
<script type="text/javascript">
// 绑定点击事件
document.querySelector('#btnAjax').onclick = function () {
// 发送ajax 请求 需要 五步
// (1)创建异步对象
var ajaxObj = new XMLHttpRequest();
// (2)设置请求的参数。包括:请求的方法、请求的url。
ajaxObj.open('get', '02-ajax.php');
// (3)发送请求
ajaxObj.send();
//(4)注册事件。 onreadystatechange事件,状态改变时就会调用。
//如果要在数据完整请求回来的时候才调用,我们需要手动写一些判断的逻辑。
ajaxObj.onreadystatechange = function () {
// 为了保证 数据 完整返回,我们一般会判断 两个值
if (ajaxObj.readyState == 4 && ajaxObj.status == 200) {
// 如果能够进到这个判断 说明 数据 完美的回来了,并且请求的页面是存在的
// 5.在注册的事件中 获取 返回的 内容 并修改页面的显示
console.log('数据返回成功');
// 数据是保存在 异步对象的 属性中
console.log(ajaxObj.responseText);
// 修改页面的显示
document.querySelector('h1').innerHTML = ajaxObj.responseText;
}
}
}
</script>
</body>
</html>
02-ajax.php:echo 'smyhvae'; 效果如下:

- POST,例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>Ajax 发送 get 请求</h1>
<input type="button" value="发送put_ajax请求" id='btnAjax'>
<script type="text/javascript">
// 异步对象
var xhr = new XMLHttpRequest();
// 设置属性
xhr.open('post', '02.post.php');
// 如果想要使用post提交数据,必须添加此行
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// 将数据通过send方法传递
xhr.send('name=fox&age=18');
// 发送并接受返回值
xhr.onreadystatechange = function () {
// 这步为判断服务器是否正确响应
if (xhr.readyState == 4 && xhr.status == 200) {
alert(xhr.responseText);
}
};
</script>
</body>
</html>
五、Ajax对象的几个重要方法和属性:
(一).open(method, url, async);
method:请求的类型,有GET和POST两种
url:文件在服务器上的位置
async:是否选择异步,true为异步,false为同步
(二).setRequestHeader("Content-type", "application/x-www-form-urlencoded");
当选择POST类型时需要使用此方法添加HTTP头,然后在send方法中添加想要发送的数据
(三).send(string);
当选择POST类型时添加参数;
(四)readyState属性、status属性;
(五)onreadystatechange事件;
注册onreadystatechange事件以后,只要ajax对象的readyState属性发生改变,就会调用onreadystatechange对应的函数。
(六).responseText和.responseXML分别为字符串形式的数据和XML形式的数据。
六、实例代码
(一)原生Javascript的ajax写法
1需要做一下兼容
1 <script> 2 //定义一个变量来存储ajax对象 3 var xhr=null; 4 if(window.XMLHttpRequest){ 5 xhr=new XMLHttpRequest; 6 } else{ 7 xhr=new ActiveXObject("Microsoft.XMLHTTP"); 8 } 9 xhr.open("GET", "url", true); 10 xhr.send();//括号内可以添加字符串,只是在POST请求时使用。 11 xhr.onreadystateChange=function(){ 12 if(xhr.readystate===4 && xhr.status===200){ 13 console.log(xhr.responseText); 14 } 15 } 16 </script>
七、jquery的几个ajax方法
(一).load()方法:从服务器加载数据,并把返回的数据放入被选元素中。
语法:$(selector).load(URL,data,callback);
(二).get()和.post()方法:通过 HTTP GET 或 POST 请求从服务器请求数据。
- GET - 从指定的资源请求数据
- POST - 向指定的资源提交要处理的数据
GET 基本上用于从服务器获得(取回)数据。注释:GET 方法可能返回缓存数据。
POST 也可用于从服务器获取数据。不过,POST 方法不会缓存数据,并且常用于连同请求一起发送数据。
语法:$.get('url',[data], callback);$.post('url',data, callback)
(三).ajax()方法:
语法:$.ajax({
url:'url',
method:'GET/POST',
data:{},
success: function(res){
}
})
八、Ajax的典型应用场景
(一)、用户登录
(二)、搜索框提示
(三)、翻页
(四)、分类树或者树形结构
(五)、自动更新的页面
浙公网安备 33010602011771号