ajax

// 创建xhr对象(兼容IE7以下),这里利用DOM0级的方式为xhr对象添加了事件处理程序,因为并非
// 所有浏览器都支持DOM2级方法
function createXHR(){
if(typeof XMLHttpRequest != "undefined"){
return new HMLHttpRequest();
}else if(typeof ActiveXObject != "undefined"){
//适用于IE7之前的版本
if(typeof arguments.callee.activeXString != "string"){
var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"],
i,
len;

for(i = 0,len = versions.length; i < len; i++){
try{
new ActiveXObject(vuersions[i]);
arguments.callee.activeXString = versions[i];
break;
}catch(ex){
//跳过
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
}else{
throw new Error("NO XHR object available.")
}
}

//新建一个xhr对象
var xhr = new createXHR();
//注册onreadystatechange事件检测每次状态变化之后readyState的值。
//在接收响应之前还可以调用xhr.abort()方法来取消异步请求。调用该方法后xhr对象会停止触发事件,
//而且也不再允许访问任何与响应哟管的对象属性。
//该事件必须在open之前调用才能确保跨浏览器兼容性。
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(( xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 ){
// console.log(xhr.responseText);
var data = JSON.$.parseJSON(xhr.responseText);
function DOMHandler(data){
//update DOM 
}
}else{
console.log("Request was unsuccessful:" + xhr.status);
}
}
};
//启动一个请求
//GET请求,通常用于向服务器查询某些信息。
var url = "demo.php";
url = addURLParam(url ,"name", "zhangyanling");
url = addURLParam(url ,"book", "Javascript");

xhr.open("get",url ,false);
xhr.send(null);
//POST请求,通常用于向服务器发送应该被保存的数据。POST请求应该把数据作为请求的主体提交,它的主体可以包含很多数据,且格式不限。
xhr.open("post",url ,false);
//可以使用setRequestHeader()设置自定义的请求头部信息,参数为:1.头部字段名称 2.头部字段值;
//该方法只能在open之后send之前调用。
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//调用getResponseHeader()方法并传入头部字段名称,可以获取响应的响应头部信息;
//调用getAllResponseHeaders()方法可以取得一个包含所有头部信息的长字符串。
//可使用serialize()对发送的数据进行序列化。
xhr.send(null);

function addURLParam(url ,name ,value){
url += (url.indexOf("?")) == -1 ? "?" : "&";
url += encodeURIComponent(name) + "=" + encodeURIComponent(value);
return url;
}

 

posted @ 2017-05-26 15:55  一江西流  阅读(181)  评论(0编辑  收藏  举报