http://blog.csdn.net/fzzwake/archive/2008/03/14/2182749.aspx
我的这篇文章里发表了一个ajax类,非常方便。可是最近在公司的项目中发现,同一个页面同时执行两个ajax提交会导致冲突,于是把AJAX类修改了下,重新发布一下修正版:
最近又加入了超时控制,数据传入格式也由字符串变成数组!
- /*
- ## 作者:夜无眠
- ## QQ:27262681
- 此类用法示例
- var ajax = new ajax;
- var db = new Array();
- db['k'] = "dddddddd";
- db['a'] = "basdfads";
- ajax.timeout = 1000 ;//超时时间,单位:毫秒 ;设为0则由浏览器系统决定!
- ajax.send("b.php",db,function (msg) {alert(msg);},"POST");
- 第四个参数POST可省略,默认为POST,可选GET
- 如果返回404错误等,msg为false;
- */
- function ajax(){//参数为返回执行函数,this.reback为返回值
- this.timeout = 0;
- this.send=function (url,db,func,method){
- var callback=func;
- method=method?method.toUpperCase():"POST";
- 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)
- }
- if(db){
- var dbstr='';
- for (i in db) {
- dbstr += dbstr ? '&'+i+'='+encodeURIComponent(db[i]) : i+'='+encodeURIComponent(db[i]);
- }
- db = dbstr;
- }
- http.open(method,url,true);
- if (method=='POST') {
- 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;
- }
- }
- }
- }