终于搞定了

Pader2008年6月20日 发表于 网页与编程 javascript js ajax

想写几个通用的 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(){   
    //无操作函数    
}


评论 共有 1 条评论