AJAX
Asynchronous JavaScript and XML(异步JavaScript和XML)
节省用户操作,时间,提高用户体验,减少数据请求
传输获取数据
AJAX优点
- 不需要插件支持(一般浏览器且默认开启 JavaScript 即可)
- 用户体验极佳(不刷新页面即可获取可更新的数据)
- 提升 Web 程序的性能(在传递数据方面做到按需放松,不必整体提交)
- 减轻服务器和带宽的负担(将服务器的一些操作转移到客户端)
- 缺点:搜索引擎的支持度不够(因为搜索引擎爬虫 暂时 还不能理解 JS 引起变化数据的内容)
AJAX过程
1、创建XMLHttpRequest对象
XMLHttpRequest()
ActiveXObject(‘Microsoft.XMLHTTP’) IE下兼容(IE7一下 6)
2、准备发送
open()
三个参数的含义
1、提交方式 Form-method
2、提交地址 Form-action
3、异步(同步)
3、执行发送动作
send(要发送的数据):发送请求
4、指定回调函数
onreadystatechange事件
readyState属性:请求状态
0 (初始化)还没有调用open()方法
1 (载入)已调用send()方法,正在发送请求
2 (载入完成)send()方法完成,已收到全部响应内容
3 (解析)正在解析响应内容
4 (完成)响应内容解析完成,可以在客户端调用了
status属性:服务器(请求资源)的状态 http状态码
5,返回内容
responseText:返回以文本形式存放的内容
responseXML:返回XML形式的内容
http状态码
1##:请求收到,继续处理
2##:操作成功收到,分析、接受
3##:完成此请求必须进一步处理
4##:请求包含一个错误语法或不能完成
5##:服务器执行一个完全有效请求失败
100——客户必须继续发出请求
101——客户要求服务器根据请求转换HTTP协议版本
200——交易成功
201——提示知道新文件的URL
202——接受和处理、但处理未完成
203——返回信息不确定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的GET请求
300——请求的资源可在多处得到
301——删除请求数据
302——在其他地址发现了请求数据
303——建议客户访问其他URL或访问方式
304——客户端已经执行了GET,但文件未变化
305——请求的资源必须从服务器指定的地址得到
306——前一版本HTTP中使用的代码,现行版本中不再使用
307——申明请求的资源临时性删除
400——错误请求,如语法错误
401——请求授权失败
402——保留有效ChargeTo头响应
403——请求不允许
404——没有发现文件、查询或URl
405——用户在Request-Line字段定义的方法不允许
406——根据用户发送的Accept拖,请求资源不可访问
407——类似401,用户必须首先在代理服务器上得到授权
408——客户端没有在用户指定的饿时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器上不再有此资源且无进一步的参考地址
411——服务器拒绝用户定义的Content-Length属性请求
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器允许的大小
414——请求的资源URL长于服务器允许的长度
415——请求资源不支持请求项目格式
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求
500——服务器产生内部错误
501——服务器不支持请求的函数
502——服务器暂时不可用,有时是为了防止发生系统过载
503——服务器过载或暂停维修
504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
505——服务器不支持或拒绝支请求头中指定的HTTP版本
AJAX封装
function ajax(url, options,success) {
/*
options: 可以传可以不传
请求方式 默认值是get
数据
dataType true 格式化返回数据 否则 不格式化 默认为false
{
userName:"值",
pwd:"值"
}
url?userName=值&
*/
var defaultJSON = {
method: "get",
data: "",
dataType:false
}
// 默认值处理
options = options ? options : {};
for (var key in options) {
defaultJSON[key] = options[key];
}
var xhr = null;
xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
// 格式化data 为字符串
var data = "";
if( defaultJSON.data ){
for( var key in defaultJSON.data ){
data += ""+key+"="+defaultJSON.data[key]+"&";
}
data = data.substr(0,data.length-1);
defaultJSON.data = data;
}
// get请求 数据处理
if( defaultJSON.method ==="get"&&defaultJSON.data ){
url = url+"?"+defaultJSON.data;
}
xhr.open(defaultJSON.method, url);
/*
如果是post且需要传数据 设置编码格式
数据要扔进send中
*/
if(defaultJSON.method=="post"&&defaultJSON.data){
xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
console.log(defaultJSON.data);
xhr.send(defaultJSON.data);
}else{
xhr.send();
}
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
// 格式化 返回数据
var res=xhr.responseText;
if(defaultJSON.dataType){
res = JSON.parse(res);
}
if(success){
success(res);
}
}
}
}