ajax 纯javascript

function createXHR(){
    if(typeof XMLHttpRequest != 'undefined'){
        return new XMLHttpRequest();
    }else if(typeof ActiveXObject != 'undefined'){
        var version = [
                'MSXML2.XMLHttp.6.0',
                'MSXML2.XMLHttp.3.0',
                'MSXML2.XMLHttp',
        ];
        for(var i=0; i<version.length; i++){
            try{
                return new ActiveXObject(version[i]);
            }catch(e){

            }
        }
    }else{
        throw new Error('您的系统或浏览器不支持XHR对象!');
    }
}


//名值对转换字符串
function params(data){
    var arr=[];
    for(var i in data){
        arr.push(encodeURIComponent(i) + '=' + encodeURIComponent(data[i]));
    }
    return arr.join('&');
}

//封装Ajax
function ajax(obj){
    var xhr = new createXHR();
    obj.url = obj.url + '?rand='+ Math.random();
    obj.data = params(obj.data);
    if(obj.method == 'get')obj.url += obj.url.indexOf('?') == -1 ? '?' +obj.data : '&' + obj.data ;
    if(obj.async === true){
        xhr.onreadystatechange=function(){
            if(xhr.readyState == 4){
                callback();
            }
        }
    }
    xhr.open(obj.method, obj.url, obj.async);
    if(obj.method === 'post'){
        xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        xhr.send(obj.data);
    }else{
        xhr.send(null);
    }
    if(obj.async === false){
        callback();
    }
    function callback(){
        if(xhr.status == 200){
            obj.success(xhr.responseText);
        }else{
            console.log("获取数据错误!错误代号:"+ xhr.status +"错误信息:"+ xhr.statusText);
        }
    }
}

//调用Ajax
addEvent(document, 'click', function(){
    ajax({
        method:'get',
        url:'demo.php',
        data:{
            'name':'L&ee',
            'age':100
        },
        success:function(text){
            console.log(text);
        },
        async:true
    });
})

 

//封装Ajax
function ajax(obj){
    var xhr = (function(){
        if(typeof XMLHttpRequest != 'undefined'){
            return new XMLHttpRequest();
        }else if(typeof ActiveXObject != 'undefined'){
            var version = [
                    'MSXML2.XMLHttp.6.0',
                    'MSXML2.XMLHttp.3.0',
                    'MSXML2.XMLHttp',
            ];
            for(var i=0; i<version.length; i++){
                try{
                    return new ActiveXObject(version[i]);
                }catch(e){

                }
            }
        }else{
            throw new Error('您的系统或浏览器不支持XHR对象!');
        }
    })();
    obj.url = obj.url + '?rand='+ Math.random();
    //obj.data = params(obj.data);
    obj.data = (function(data){
        var arr=[];
        for(var i in data){
            arr.push(encodeURIComponent(i) + '=' + encodeURIComponent(data[i]));
        }
        return arr.join('&');
    })(obj.data);
    if(obj.method == 'get')obj.url += obj.url.indexOf('?') == -1 ? '?' +obj.data : '&' + obj.data ;
    if(obj.async === true){
        xhr.onreadystatechange=function(){
            if(xhr.readyState == 4){
                callback();
            }
        }
    }
    xhr.open(obj.method, obj.url, obj.async);
    if(obj.method === 'post'){
        xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        xhr.send(obj.data);
    }else{
        xhr.send(null);
    }
    if(obj.async === false){
        callback();
    }
    function callback(){
        if(xhr.status == 200){
            obj.success(xhr.responseText);
        }else{
            console.log("获取数据错误!错误代号:"+ xhr.status +"错误信息:"+ xhr.statusText);
        }
    }
}

 

/* 
* @Author: ocean
* @Date:   2015-06-22 23:21:37
* @Last Modified by:   ocean
* @Last Modified time: 2015-06-22 23:42:10
*/

'use strict';

// 惰性载入
function createXHR(){
    if(typeof XMLHttpRequest != "undefined"){
        createXHR = function(){
            return new XMLHttpRequest();
        }
    } else if (typeof ActiveXObject != "undefined"){
        createXHR = function(){
            if(typeof arguments.callee.activeXString != "string"){
                var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"],
                    i, len;

                for(i = 0, len = versions.length; i < len; i++){
                    try{
                        new ActiveXObject(versions[i]);
                        arguments.callee.activeXString = versions[i];
                            break;
                    } catch (ex) {
                        //skip
                    }
                }
            }

            return new ActiveXObject(arguments.callee.activeXString);
        }
    } else {
        createXHR = function(){
            throw new Error("NO XHR object available.");
        }
    }

    return createXHR();
}


// 模块模式
var createXHR = (function(){
    if(typeof XMLHttpRequest != "undefined"){
        return function(){
            return new XMLHttpRequest();
        }
    } else if (typeof ActiveXObject != "undefined"){
        return function(){
            if(typeof arguments.callee.activeXString != "string"){
                var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"],
                    i, len;

                for(i = 0, len = versions.length; i < len; i++){
                    try{
                        new ActiveXObject(versions[i]);
                        arguments.callee.activeXString = versions[i];
                        break;
                    } catch (ex) {
                        //skip
                    }
                }
            }

            return new ActiveXObject(arguments.callee.activeXString);
        }
    } else {
        return function(){
            throw new Error("NO XHR object available.");
        }
    }
})();

 

posted @ 2014-08-29 00:18  oceanden  阅读(274)  评论(0)    收藏  举报