浅谈ajax
前几天,跟一个比较资深的项目经理聊了会,谈到了面试,依旧老生常谈的那些面试题,ajax、数据库这些都是必问题,正好自己亲戚家里有小孩毕业了,就顺便整理了一些。
ajax是前后端数据交互的重要手段
前后端交互一定要是字符串的形式!!! 牢记
Ajax :异步 JavaScript 和 XML,它并不是 JavaScript 的一种单一技术,而是利用了一系列交互式网页应用相关的技术所形成的结合体
由于ajax的多众性,他的缺点和优点都非常明显。
优点
1.不需要插件支持(一般浏览器且默认开启 JavaScript 即可);
2.实现无加载刷新页面,用户体验极佳;
3.提升 Web 程序的性能(在传递数据方面做到按需发送,不必整体提交);
4.减轻服务器和带宽的负担(将服务器的一些操作转移到客户端);
缺点
1.不同版本的浏览器对 XMLHttpRequest 对象支持度不足(比如 IE5 之前);
2.前进、后退的功能被破坏(因为 Ajax 永远在当前页,不会记录前后页面);
3.搜索引擎的支持度不够(因为搜索引擎爬虫还不能理解 JS 引起变化数据
的内容);
AJAX的兼容问题:
ajax = new XMLHttpRequest();
ajax = new ActiveXObject("Microsoft.XMLHTTP"); //兼容IE5及
以下,可以忽视了
AJAX的缓存问题:
我们可以通过时间戳来轻易躲开浏览器的缓存
ajaxGet('?t='+ new Date().getTime(),fn)
ajax.readyState自身的四种状态
0 -(未初始化)还没有调用send()方法
1 -(载入)已调用send()方法,正在发送请求
2 -(载入完成)send()方法执行完成,已经接收到全部响应内容
3 -(交互)正在解析响应内容
4 -(完成)响应内容解析完成,可以在客户端调用了
当创建了XMLHttpRequest对象后,要先设置onreadystatechange的回调函数。在回调函数中,通常我们只需通过readyState==4判断请求是否完成,如果已完成,再根据status === 200判断是否是一个成功的响应。
XMLHttpRequest对象的open()方法有3个参数
第一个参数指定是GET还是POST
第二个参数指定URL地址
第三个参数指定是否使用异步,默认是true,所以不用写。
注意
千万不要把第三个参数指定为false,否则浏览器将停止响应,直到ajax请求完成。
如果这个请求耗时10秒,那么10秒内你会发现浏览器处于“假死”状态。
最后调用send()方法才真正发送请求。GET请求不需要参数,POST请求需要把body部分以字符串或者FormData对象传进去。
提示:GET请求具有以下的几个特点:
· GET 请求可被缓存
· GET 请求保留在浏览器历史记录中
· GET 请求可被收藏为书签
· GET 请求不应在处理敏感数据时使用
· GET 请求有长度限制
· GET 请求只应当用于取回数据
POST请求的特点如下:
· POST 请求不会被缓存
· POST 请求不会保留在浏览器历史记录中
· POST 请求不能被收藏为书签
· POST 请求对数据长度没有要求
实现AJAX的详细过程:
1.new XMLHttpRequest创建一个XHR对象:
var AJAX=new XMLHttpRequest( );
2.使用open()方法初始化XMLHttpRequest对象,指定URL
AJAX.open('get','data/test.json',true);
3.设置回调函数,当响应成功时调用:
ajax.onreadystatechange = function(){
if (ajax.readyState == 4 && ajax.status == 200){
func_succ(ajax.responseText);
}else if(ajax.readyState == 4 && ajax.status != 200){
//alert("ajax faild readyState:"+ajax.readyState+" status:"+ajax.status);
}
};
4. 使用send()方法发送请求
ajax.send(null);