﻿// ajax函数集合
//作者：刘标才
//日期：2008-09-16

//创建xmlHttp对象,返回一个ajax对象
function CreateXmlHttp()
{
    var xmlHttp=null;
    try 
    {
        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 
    }
    catch (e) 
    { 
       try 
       { 
           xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
       }
       catch (e)
       { 
           try 
           { 
               xmlHttp = new XMLHttpRequest(); 
           }
           catch (e) 
           { 
              xmlHttp = false; 
           }
       }
    }
    return xmlHttp;
}

/*
执行一个ajax操作 
参数url表示服务器端路径
参数isPost表示是否用post方式提交数据true表示是，其他表示否
参数date表示提交的数据格式为“id=1&name=a”
参数methodName表示ajax执行成功时调用的方法名称(注意不要加双引号或单引号)，该方法参数为一个ajax对象
参数id表示控件的id
注：当method为空时必须提供参数id
*/
function doAjax(url,isPost,data,methodName,id)
{
    if(url==null||url=="")return;
    var method="GET";
    if(isPost==true){
        method="POST";
    }
    var xmlHttp=CreateXmlHttp();
    xmlHttp.open(method, url, true);
    if(methodName!=null&&methodName!=""){//判断调用哪个方法，不为空则表示调用自定义方法，为空表示调用用statechange方法（默认）
        xmlHttp.onreadystatechange=function(){
            methodName(xmlHttp);
        }
    }
    else{
        if(id!=null&&id!=""){
	        xmlHttp.onreadystatechange = function(){statechange(xmlHttp,id)};
	    }
	}
	if(xmlHttp.readyState==1){
	    if(isPost){
	        xmlHttp.setrequestheader("Content-Length",data.length); 
            xmlHttp.setRequestHeader("cache-control","no-cache");
            xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//因为是post提交所以必须有这句
	        xmlHttp.send(data);
	    }
	    else{
	        xmlHttp.send(null);
	    }
	}
}

/*
执行一个ajax操作 
参数url表示服务器端路径
参数id表示控件的id
*/
function getAjax(url,id){
    doAjax(url,false,null,null,id);
}

/*
执行一个ajax操作 
参数url表示服务器端路径，不包含？后面的键值
参数id表示控件的id
参数date表示提交的数据格式为“id=1&name=a”
例如：postAjax("Default.aspx","txt_name","id=1&name=a")
*/
function postAjax(url,id,data){
	doAjax(url,true,data,null,id);
}


/*
执行一个ajax操作，提供一个自定义方法，在ajax执行成功时调用
参数xmlHttp表示ajax对象
参数url表示服务器端路径
参数methodName表示ajax执行成功时调用的方法名称，该方法参数为一个ajax对象
例如：getAjaxByMethod("Default.aspx?id=1",statechange)
*/
function getAjaxByMethod(url,methodName){
    doAjax(url,false,null,methodName);
}


/*
执行一个ajax操作，提供一个自定义方法，在ajax执行成功时调用
参数xmlHttp表示ajax对象
参数url表示服务器端路径
参数methodName表示ajax执行成功时调用的方法名称，该方法参数为一个ajax对象
参数date表示提交的数据格式为“id=1&name=a”
例如：postAjax("Default.aspx","txt_name","id=1&name=a")
*/
function postAjaxByMethod(url,methodName,data){
     doAjax(url,true,data,methodName);
}

/*
ajax状态改变时执行的方法
参数xmlHttp表示ajax对象
参数id表示显示信息的控件的id
参数js表示数据显示后要调用的方法,包含参数,比如"loadComment(1,32)";
*/
function statechange(xmlHttp, id) {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200 && xmlHttp.responseText != null) {
        var info = unescape(xmlHttp.responseText);
        document.getElementById(id).innerHTML = info;
    }
    else if(xmlHttp.readyState == 4 && xmlHttp.status != 200) {
        document.getElementById(id).innerHTML = "接收数据发生异常！";
    }
    xmlHttp = null;
}
