网络编程
位置:首页>> 网络编程>> JavaScript>> 封装2个ajax函数

封装2个ajax函数

 来源:51js 发布时间:2010-09-03 18:14:00 

标签:ajax,函数,封装

听说最近流行JQ风格的语法,不流行EXT风格了

一.

//ajax类
fw=window.fw||{};

fw.ajax = {
    init : function (url, method){
        this.url = url;
        this.arg = null;
        this.json = {};
        this.method = method || "get";
        return this;
    },
    //获取表单的值作为参数
    setForm : function(form){
        this.json = fw.getForm(form);
        return this;
    },
    //直接赋值参数
    setArg : function(o){
        var a = [];
        o = fw.merge(this.json, o);
        for(var i in o){
            a.push(i+"="+o[i]);
        }
        if(a.length>0){
            a = a.join("&");
            this.method=="get" ? this.url+="?"+a : this.arg=a;
        }
        return this;
    },
    //回调
    callback : function(cb,tp){
        var x = fw.xmlhttp();
        x.open(this.method, this.url, true);
        x.onreadystatechange = function(){
            if(cb&&x.readyState==4&&(x.status==0||x.status==200)){
                var v = x.responseText;
                if(tp=="json") v = fw.parse(v);
                cb(v);
            }
        }
        x.send(this.arg);
    }
}
//demo: fw.ajax.init("data/ajax.php","post").setForm("ajax_form").setArg({act:"show"}).callback(showResult,"json");

2.

 


function Ajax (Args){
    var Args = Args || {}, XHR = (function() {
        try {return new XMLHttpRequest();}catch(e){};
        try {return new ActiveXObject('Msxml2.XMLHTTP');}catch(e){};
        try {return new ActiveXObject('Microsoft.XMLHTTP');}catch(e){};       
    })();
    var Data = !!Args.Data && (function() {
        var tempArr = [];
        for(var i in Args.Data) tempArr.push(i + '=' + Args.Data[i]);
        return tempArr.join('&');
    })();
    XHR.open(Args.Method || 'GET', (Args.Url || document.URL) + (Data ? '?' + Data : ''), !!Args.CallBack);
    !!Args.CallBack && (XHR.onreadystatechange = function(){
        (XHR.readyState == 4 && XHR.status == 200) ? Args.CallBack.True.call(XHR) :
        Args.CallBack.False && Args.CallBack.False.call(XHR.readyState < 4 ? XHR.readyState : XHR.status);
    });
    !!Args.Method && XHR.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=' + Args.CharSet || 'utf-8');
    XHR.send(Data || null);
    return XHR;
};

//调用说明:
Ajax({
    Url : 'archiver/',    //访问地址,选填,默认为当前页
    Data : {            //提交的数据列表,如果要将url后面的get参数写在这里,那么url请不要带参数,选填
        wd : '51js'
    },
    Method : 'get',            //模式,选填,默认为get
    CharSet : 'gbk',        //编码,选填,默认为utf-8
    CallBack : {            //回调函数,选填,为空表示整个过程为同步执行
        True : function(){    //成功调用的函数,选填,函数自动替换this对象为XMLHTTPRequest对象
            alert(this.responseText);
        },
        False : function(){    //加载或失败调用的函数,选填,函数自动替换this对象为readyState(加载中)或status(加载失败)
            alert(this);
        }
    }
});
//同步get
//调用方法:alert(Ajax({Url : 'https://www.aspxhome.com/'}).responseText);

 

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com