想要了解什么是ajax先从几个问题开始:
1.ajax怎么同时发送多个请求?
在ajax应用中,通常一个页面要同时发送多个请求,如果只有一个XMLHttpRequest 对象,前面的请求还未完成,后面的就会把前面的覆盖掉,如果每次都创建一个新的 XMLHttpRequest对象,也会造成浪费。解决的办法就是创建一个XMLHttpRequset的对象池,如果池里有空闲的对象,则使用此对象,否则将创建一个新的对象。
2.手动编写一个ajax,不依赖第三方库?
<script>
// 1. 创建 xhr 对象
var xhr = new XMLHttpRequest();
// 2.打开服务流
// 参数一:请求的方式 get或者post
// 参数二:请求的地址 如果是get请求,数据是会坠在url地址上发送过去
// 参数三:是否异步 默认值是true (异步) false (同步)
xhr.open('get', 'demo.php?username=feifei&age=18', true);
// 3.由于是get请求,所以不需要发送请求体数据,直接发送一个null
xhr.send(null);
// 4.服务器响应
// 但凡是readyState状态发生改变的时候,就触发的事件
// 如果当readyState状态为4的时候代表ajax已经回到了客户端
// xhr.status == 200 代表服务器响应成功
// 只有当这两者都满足的时候,代表将服务端的数据拿回到了客户端
// xhr.responseText里面存放着服务器响应回来的数据
xhr.onreadystatechange = function(){
if(xhr.readyState==4&&xhr.status==200){
var data = xhr.responseText;
console.log(data);
}
}
</script>
什么是ajax?
AJAX = 异步 JavaScript 和 XML。
AJAX 是一种用于创建快速动态网页的技术。
通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。
ajax的优缺点:
优点:
1.局部刷新、
AJAX最大优点就是能在不刷新整个页面的前提下与服务器通信维护数据。这使得Web应用程序更为迅捷地响应用户交互,并避免了在网络上发送那些没有改变的信息,减少用户等待时间,带来非常好的用户体验。
2.异步加载
AJAX使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。优化了Browser和Server之间的沟通,减少不必要的数据传输、时间及降低网络上数据流量。
3.前端和后端负载平衡
AJAX可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,AJAX的原则是“按需取数据”,可以最大程度的减少冗余请求和响应对服务器造成的负担,提升站点性能。
4.基于标准被广泛支持
AJAX基于标准化的并被广泛支持的技术,不需要下载浏览器插件或者小程序,但需要客户允许JavaScript在浏览器上执行。随着Ajax的成熟,一些简化Ajax使用方法的程序库也相继问世。同样,也出现了另一种辅助程序设计的技术,为那些不支持JavaScript的用户提供替代功能。
界面与应用分离
Ajax使WEB中的界面与应用分离(也可以说是数据与呈现分离),有利于分工合作、减少非技术人员对页面的修改造成的WEB应用程序错误、提高效率、也更加适用于现在的发布系统。
缺点:
ajax干掉了back和history功能,即对浏览器机制的破坏
在动态更新页面的情况下,用户无法回到前一个页面状态,因为浏览器仅能记忆历史记录中的静态页面。一个被完整读入的页面与一个已经被动态修改过的页面之间的差别非常微妙;用户通常会希望单击后退按钮能够取消他们的前一次操作,但是在Ajax应用程序中,这将无法实现。
ajax的安全问题
AJAX技术给用户带来很好的用户体验的同时也对IT企业带来了新的安全威胁,Ajax技术就如同对企业数据建立了一个直接通道。这使得开发者在不经意间会暴露比以前更多的数据和服务器逻辑。
对搜索引擎支持较弱
不利于SEO优化,对搜索引擎的支持比较弱。如果使用不当,AJAX会增大网络数据的流量,从而降低整个系统的性能
破坏程序的异常处理机制
难以调试
ajax的语法
分为四个步骤(不再兼容IE低版本):
1.创建xhr对象
var xhr=new XMLHttpRequest();
2.打开服务流
2.1 get方式:
xhr.open("GET","ajax_info.txt?username='zhangsan&gender='男'",true);
2.2 post方式:
xhr.open("POST","ajax_info.txt?",true);
小结:
open()中三个参数:open(method,url,async)
规定请求的类型、URL 以及是否异步处理请求。
- method:请求的类型;GET 或 POST
- url:文件在服务器上的位置
- async:true(异步)或 false(同步)
get和post方式的差异:
get的参数直接坠在url中,post方式在send()中传递
3.向服务器发送请求
3.1 get方式
xhr.send();
3.2 post方式
xhr.send("username='zhangsan&gender='男'");
4.服务器响应
xhr.onreadystatechange=function()
{
if (xhr.readyState==4 && xhr.status==200)
{
console.log(xhr.resposeText);
}
}
- 参数介绍: 属性 描述 onreadystatechange 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
readyState
存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪
status 200: "OK"
404: 未找到页面