/* ## 作者:夜无眠 ## QQ:27262681 */ function ajax(){//参数为返回执行函数,this.reback为返回值 this.timeout = 0; //超时时限 /* *提交数据 *@param str url 提交的目的URL; *@param obj func 服务器返回数据后触发的函数,例如: function (msg){alert(msg);} *@param array db 可省略参数,省略则为GET方式提交,有值则为POST方式提交,提交的数据,为字符串键值的关联数组,类似于: {'a':'aa','b':'bb'} */ this.send=function (url,func,db){ var callback=func; var method = db ? 'POST' : 'GET'; if(window.ActiveXObject){ var http = new ActiveXObject("Microsoft.XMLHTTP"); }else if(window.XMLHttpRequest){ var http = new XMLHttpRequest(); } var sf = this;//复制对象 http.onreadystatechange=function () { //绑定触发事件 sf.f(http,callback) } http.open(method,url,true);//打开连接 if(db){ db = this.arrtostr(db); http.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); } http.send(db); if (sf.timeout > 0) { setTimeout(function () {http.abort();},sf.timeout); } } this.f=function (http,callback){ if(http.readyState == 4){ if(http.status == 200){ var reback = http.responseText; callback(reback); http=null;//注销http实例 }else { callback(false); http=null; } } } /* *转换关联数组 *@param array arr 关联数组,类似于: {'a':'aa','b':'bb'} *@return str 返回一个字符串,类似于: a=aa&b=bb */ this.arrtostr = function (arr) { var str=''; for (i in arr) { str += str ? '&'+i+'='+encodeURIComponent(arr[i]) : i+'='+encodeURIComponent(arr[i]); } return str; } } 用法简单示例: <mce:script type="text/javascript"><!-- ajax = new ajax; var a = Array(); a['a'] = 'aa我'; a['b'] = 'bb'; ajax.send("a.php?"+ajax.arrtostr(a),function(msg){alert(msg);},{'aa':'cc'}); // --></mce:script>