AsynchronousJavascriptAndXML
Asynchronous:异步
XML: 数据格式 --已经被json所取代
ajax ----- ajaj
AJAX:阿贾克斯
无刷新(异步)取数据(可以顺带着提交一些数据)
引入ajax.js
用法:
ajax(URL,function(){},function(){});
URL:请求的地址
http://www.weibo.com?我想要热门话题
1:function(){}
请求成功之后的回调函数
2:function(){}--可以不写
请求失败时的回调函数
注意:
1)返回值,都是字符串
2)缓存
用url缓存
https://www.baidu.com
https://www.baidu.com?wd=123
https://www.baidu.com?t=Math.random()
解决:在URL身上加一个随机数作参数,导致每次请求URL,都是不一样的
t = Math.random(); ---- 随机因子
?后是数据data
3)乱码:
你自己的文件和请求的文件编码不一致导致
解决:保持一致
4)不关心后缀
习惯:.json.data.zns
微博:
数组随机排序:
dataList.sort(function(){
return 0.5 - Math.random();
});
自己写Ajax:
工作流程、原理,分几步,和现实世界一个例子
打电话:
1)盗一个手机
2)拨号
3)说话
4)听
Ajax:
1)要有一个Ajax对象
2)建立连接
3)打开连接,请求数据
4)接收
1)window.XMLHttpRequest在IE6下是undefined
2)
oAjax.open('GET',url,true);
参数:
1-方式 GET POST
2-请求地址 ULR
3-是否异步 true
4)
oAjax.onreadystatechange = function(){
oAjax.reasyState == 4//完成通信息状态
oAjax.status>=200&& oAjax.status<300 ||oAjax.status == 304 //304没有修改成功
};
oAjax.readyState == 4--当前这次ajax请求的一个通信状态
oAjax.readyState通信状态,只读的,不能修改(赋值)
0 UNSENDajax对象已经准备完毕,但是还没有打开连接
1 OPENDED已经打开连接(建立好连接)
2 HEADERS-RECEVICED发送请求完毕,头部信息也接收完毕了
3 LOADING下载内容(接收内容)
4 DONE操作完毕
oAjax.status
http状态码
200OK
302 Move temporarily重定向
304NotModified
403 Forbidden
404 Not Found
405Method Not Allowed
414 Request-URI Too Large
500 Internal Server Error服务器错
502Bad Gateway
function ajax(url,fnSucc,fnFail)
function ajax(url,data,fnSucc,fnFail)
--把json格式的参数data,转换成url参数的形式a=1&b=2&c=3
function json2url: json to url
接口:协议
文档,url地址
文档:文件内部网址
接口文档,包括:
1)功能说明
2)需要的参数
3)返回值的说明
ajax交互时,文档中有一个东西不会写:t=....随机因子
交互时,步骤:
1)按要求,拼接口
2)发ajax请求
confirm(); --确认 返回true/false
ajax改进:
1)POST
邮寄
//设置请求头
2)时间:超时时间
setTimeout();
ajax({
url:'post.php',
success:function(){},
error:function(){},
data:{},
type:'post',
time:'1000'
});
ajax框架完善:
超时时间:定时器里加入了清除 状态监听 的事件
oAjax.onreadystatechange= null;
fnLoading : 加载中的回调
complete : 完成时的回调
字符串编码:
encodeURIComponent(str)
URI: 统一资源定位
--url
做交互时,只要涉及中文,都要编码
Ajax2.0:
兼容性 (不用看)
增加了很多好用的方法
请求头:
oAjax.getAllResponseHeaders());//获取所有的响应头信息
Date: Tue, 22 Nov 2016 02:55:04 GMT
Last-Modified: Tue, 22 Nov 2016 02:50:42 GMT
Server: Apache/2.2.6 (Win32) PHP/5.2.5
Accept-Ranges: bytes
ETag: "11506-4-d69538dd"
Content-Length: 4
Content-Type: text/plain
类型: string
getResponseHeader:获取某一条信息
console.log(oAjax.getResponseHeader('Date'));
console.log(oAjax.getResponseHeader('Content-Length'));
超时:
oAjax.timeout
oAjax.ontimeout=function(){};
其它事件:
onload 加载完成
onerror 出错
onabort 异常退出
onprogress 进度
事件详情 ev ev.loaded / ev.total
FormData
跨域的问题: 需要服务器端做设置,与前端无关。