1、注意:
1)返回值,都是字符串
2)缓存
用url缓存
https://www.baidu.com?wd=123
https://www.baidu.com
解决:在URL身上加一个随机数作参数,导致每次请求 URL,都是不一样的
t = Math.random();// 随机因子
3)乱码:
你自己的文件 和 请求的文件 编码不一致导致
解决: 保持一致
4)不关心后缀
习惯: .json .data
2、ajax工作流程
1)创建一个ajax对象
var oAjax = new XMLHttpRequest();
var oAjax = new ActiveXObject('Microsft.XMLHTTP');
if(window.XMLHttpRequest)
2)oAjax.open('GET',url,true);
GET.请求方式
url.请求地址
true.是否异步
3)oAjax.send();
4)接收
oAjax.onreadystatechange = function(){
oAjax.reasyState == 4 //完成 通信息状态
oAjax.status>=200 && oAjax.status<300 || oAjax.status == 304
//304 没有修改
成功
};
3、oAjax.readyState 通信状态,只读的,不能修改(赋值)
0 UNSEND ajax对象已经准备完毕,但是还没有打开连接
1 OPENDED 已经打开连接(建立好连接)
2 HEADERS-RECEVICED 发送请求完毕,头部信息也接收完毕了
3 LOADING 下载内容(接收内容)
4 DONE 操作完毕
4、http状态码:
200 OK
302 Move temporarily 重定向
304 Not Modified
403 Forbidden
404 Not Found
405 Method Not Allowed
414 Request-URI Too Long
500 Internal Server Error 后台代码写问题
502 Bad Gateway
eg:
function json2url(json){
json.t = Math.random();
var arr = [];
for(var name in json){
arr.push(name+'='+json[name]);
}
return arr.join('&');
}
/*
* url:请求地址
* data:提交数据、参数
* time:超时时间
* type: get post
* success:fn
* error:fn
* */
function ajax(json){
var json = json || {};
if(!json.url){
alert('请给出url地址');
return;
}
json.data = json.data || {};
json.time = json.time || 1000;
json.type = json.type || 'GET';
//1.ajax对象 request:请求 response:响应
if(window.XMLHttpRequest){
var oAjax = new XMLHttpRequest();
}
else{
var oAjax = new ActiveXObject('Microsoft.XMLHTTP');
}
//2.建立连接
switch (json.type.toLowerCase()){
case 'post':
oAjax.open('POST',json.url,true);
oAjax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');//设置一个请求头
oAjax.send(json2url(json.data));
break;
case 'get':
oAjax.open('GET',json.url+'?'+json2url(json.data),true);
//3.打开连接
oAjax.send();
break;
}
//加载中
json.fnLoading && json.fnLoading();
//4.接收
var timer = null;
oAjax.onreadystatechange = function(){
if(oAjax.readyState == 4){
//完成
clearTimeout(timer);
json.complete && json.complete();
if(oAjax.status >= 200 && oAjax.status<300 || oAjax.status == 304){
//成功
json.success && json.success(oAjax.responseText);
}
else{
json.error && json.error(oAjax.status);
}
}
};
timer = setTimeout(function(){
alert('你的网速太慢了,别等了!');
oAjax.onreadystatechange = null;
},json.time);
}