想写几个通用的 AJAX 所用的函数,在写 postRequest() 这个函数的时候总是得不到返回值,后来才知道,用异步数据是不行的,得同步,记录下。。。
在此要感谢这篇文章 http://xujingbao.javaeye.com/blog/186050
下面的 writePostRequest() 函数因为不想脚本臃肿,就直接调用了 postRequest() 函数了,因为没有返回值可以用异步回调的方式,不过要另写整个函数,所以如果想看上去执行速度快一些的话就可以重写 writePostRequest() 函数用异步的方式。
另外一点就是如果 Post 数据的时候中文要编码,否则发送到服务器端会乱码,当然可以在服务器端转换编码,详情可以参考《PHP的unescape()函数》这篇文章。
JavaScript代码
var xmlHttp;
var isie = false;
function createXmlHttp(){
var theObject;
if(window.ActiveXObject){ //Get xmlHttp
theObject = new ActiveXObject("Microsoft.XMLHTTP"); //IE6及以上版本
isie = true;
}else if(window.XMLHttpRequest){
theObject = new XMLHttpRequest();
}else{
alert("您的浏览器不支持XMLHTTP,页面无法创建对象,将会影响到页面的正常功能!");
}
return theObject;
}
function getRequest(url){ //获取 GET 返回数据
xmlHttp = createXmlHttp();
try{
if(isie == false ){
xmlHttp.open("GET", url, false);
xmlHttp.setRequestHeader("If-Modified-Since","0");
xmlHttp.overrideMimeType("text/html;charset=gb2312");
xmlHttp.send(null);
return xmlHttp.responseText;
}else{
xmlHttp.open("GET", url, false);
xmlHttp.setRequestHeader("If-Modified-Since","0");
xmlHttp.send(null);
if(xmlHttp.readyState == 4){
if(xmlHttp.status == 200 || xmlHttp.status == 0){
return Recenspace(xmlHttp.responseBody);
}
}
}
}catch(exception){
document.write('exception:'+exception.message);
}
}
function postRequest(url,postString){ //获取 POST 返回数据
xmlHttp = createXmlHttp();
var returnText = null;
xmlHttp.onreadystatechange = function(){
if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
returnText = xmlHttp.responseText;
}
}
xmlHttp.open("POST", url, false);
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//xmlHttp.overrideMimeType("text/html;charset=gb2312");
xmlHttp.send(postString);
return returnText;
}
function Recenspace(Html){
var rs=new ActiveXObject("ADODB.RecordSet");
rs.fields.append("a",201,1);
rs.open();
rs.addNew();
rs(0).appendChunk(Html);
rs.update();
return rs(0).value;
rs.close();
}
function writeGetRequest(url,element){ //写入 GET 返回值
document.getElementById(element).innerHTML = getRequest(url);
}
function writePostRequest(url,postString,element){ //写入 POST 返回值
document.getElementById(element).innerHTML = postRequest(url,postString);
}
function doIt(){
//无操作函数
}