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