/**
 *     @todo 封装Ajax 传输类
 *     @param params:参数
 *    @example 用法: var mAjaxer = new Ajaxer(parames);mAjaxer.send();
 */
(function (window,undefined) {
    var defined = {},
        rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g;
    defined.trim = function( text ) 
    {
        return (text || "").replace( rtrim, "" );
    };
    defined.parseJSON = function(data,error) 
    {
        if ( typeof data !== "string" || !data ) 
            return null;
        data = this.trim(data);
        // Make sure the incoming data is actual JSON
        // Logic borrowed from http://json.org/json2.js
        if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
            .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
            .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {
            // Try to use the native JSON parser first
            return window.JSON && window.JSON.parse ?
                window.JSON.parse( data ) :
                (new Function("return " + data))();
        }
        else 
            error("Invalid JSON: " + data);
    };
    defined.json2String = function(jsonData) {
        var strArr = [];
        for(var k in jsonData) {
            strArr.push(k + "=" + jsonData[k]);    
        }
            
        return strArr.join("&");
    }
    var Ajaxer = function(params)
    {
        var _p = {},
            xmlHttp;
        if (typeof params == 'undefined') 
        {
            return false;
        }
        // 发送请求
        this.send =    function ()
        {
            xmlHttp = null;
            xmlHttp = _p.createXMLHttp();
            if(xmlHttp == null)
            {
                error = {'code' : 404,"message" : "您的浏览器版本过低,无法创建异步对象,请升级您的浏览器!"}
                params.error(error);
            }
            else
            {
                //打开ajax请求
                xmlHttp.open(params.method,params.url,params.async);
                //一般jquery会传递这个参数,进行区分ajax请求
                xmlHttp.setRequestHeader("X-Requested-With","XMLHttpRequest"); 
                //如果是post的话,要对url进行encode
                if (params.method.toLowerCase() == 'post')
                {
                    xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                    if (typeof params.data != 'string')
                        params.data = defined.json2String(params.data);
                    //对post或get发送数据
                    xmlHttp.send(params.data);
                }
                else
                {
                    xmlHttp.send(null);
                }
                
                //处理状态
                xmlHttp.onreadystatechange = _p.SendBack;
            }
        };
        //处理回调函数
        _p.SendBack = function ()
        {    
            if(xmlHttp.readyState == 4)
            {
                if(xmlHttp.status == 200)
                {    
                    var data,
                        ct = xmlHttp.getResponseHeader("content-type") || "";
                    data = xmlHttp.response;
                    //判断是否是json
                    if (params.dataType === "json" || !params.dataType && ct.indexOf("json") >= 0)
                    {
                        data = defined.parseJSON(data,params.error);
                    }
                    params.success(data);                
                }
                else
                {
                    var error = {'code' : xmlHttp.status,"message" : xmlHttp.statusText};
                    params.error(error);
                }
                if (params.async) 
                {
                    xmlHttp = null;
                }
            }
        };
        //创建ajax对象
        _p.createXMLHttp = function()
        {
            var xmlhttp = null;
        
            // 针对不同浏览器建立这个对象的不同方式写不同代码
            if(window.XMLHttpRequest) {
                xmlhttp = new XMLHttpRequest();
                //针对某些特定版本的Mozillar浏览器的BUG进行修正
                if(xmlhttp.overrideMimeType) {
                    xmlhttp.overrideMimeType("text/xml");
                }
                
            } else if (window.ActiveXObject) {
                var activexName = ['MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
                for (var i=0; i<activexName.length; i++) {
                    try {
                        xmlhttp = new ActiveXObject(activexName[i]);
                        break;
                    } catch(e) {}
                }
            }
            return xmlhttp;
        }
    }
    
    window.Ajaxer = Ajaxer;
    window.defined = defined;
})(window);用惯了jquery原生的忘了差不多,补一下. 

javascript-ajax学习的更多相关文章

  1. javascript Ajax 学习

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! AJAX是asynchronousjavascript and XML的简写,就是异步的javascrip ...

  2. Ajax学习心得

    Ajax学习心得 大致学了下Ajax,才知道它不是某种编程语言,而是一种在无需加载整个页面的情况下能够更新部分网页的技术.了解了它的功能后觉得这真是一种好的技术,这得给前端和运维省多少力啊! 传统的网 ...

  3. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  4. 大量Javascript/JQuery学习教程电子书合集

    [推荐分享]大量Javascript/JQuery学习教程电子书合集,送给有需要的人   不收藏是你的错^_^. 经证实,均可免费下载. 资源名称 资源大小   15天学会jQuery(完整版).pd ...

  5. [推荐分享]大量Javascript/JQuery学习教程电子书合集,送给有需要的人

    不收藏是你的错^_^. 经证实,均可免费下载. 资源名称 资源大小   15天学会jQuery(完整版).pdf 274.79 KB   21天学通JavaScript(第2版)-顾宁燕扫描版.pdf ...

  6. AJAX学习前奏----JS基础加强

     AJAX学习前奏----JS基础加强 知识概要: 1.js类&属性&方法的定义 2.静态属性与方法 3.构造方法 4.原型的使用 5.Object对象直接加属性和方法 6.JSO ...

  7. JavaScript紧凑学习

    JavaScript紧凑学习 windows本地,调用命令行: win键+R 键入cmd , (cmd是Command 命令行 简称) 目录是C盘下的 C:\Users\Administrator&g ...

  8. AJAX学习2

    作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主.有不正确的地方,欢迎批评指正. 本文学习内容:https://www. ...

  9. [学习笔记]AJAX学习

    AJAX学习 ——在w3cschool学习AJAX的学习笔记 参考网站:w3cschool XMLHttpRequest 是 AJAX 的基础. XMLHttpRequest 对象 所有现代浏览器均支 ...

  10. javascript立体学习指南

    javascript立体学习指南第一章:首先了解javascript 首先,什么是javascript? JavaStrip出生于1995年,是一种文本脚本语言,成都装修公司是一种动态的.弱类型的.基 ...

随机推荐

  1. Unicode字符集下CString与char *相互转换

    经常遇到CString转换char*时只返回第一个字符.原因是因为在Unicode字符集下CString会以Unicode的形式来保存数据,强制类型转换只会返回第一个字符.所以直接转换在基于MBCS的 ...

  2. CPU卡读写程序

    CPU卡也称智能卡,卡内的集成电路中带有微处理器CPU.存储单元(包括随机存储器RAM.程序存储器ROM以及芯片操作系统COS.装有COS的CPU卡相当于一台微型计算机,不仅具有数据存储功能,同时具有 ...

  3. C#进程间通讯技术-整理。

    原文:C#进程间通讯技术-整理. 扩展阅读:http://www.cnblogs.com/joye-shen/archive/2012/06/16/2551864.html 一.进程间通讯的方式 1) ...

  4. GDB 的MI接口

    背景介绍: libgdb过时了,目前的GDB调试前端都不用libgdb 目前有两种比较流行:- MI接口,现在应该是MI II接口,是Eclipse CDT所采用的方式- emac输出接口,这个似乎有 ...

  5. [置顶] css3 befor after 简单使用 制作时尚焦点图相框

    :befor.:after是CSS的伪元素,什么是伪元素呢?伪元素用于向某些选择器设置特殊效果. 我们用CSS手册可以查询到其基本的用法: E:before/E::before 设置在对象前(依据对象 ...

  6. 动态规划——min/max的单调性优化总结

    一般形式: $max\{min(ax+by+c,dF(x)+eG(y)+f)\},其中F(x)和G(y)是单调函数.$ 或 $min\{max(ax+by+c,dF(x)+eG(y)+f)\},其中F ...

  7. c# splitter控件使用简介

    摘自:http://blog.itpub.net/26221264/viewspace-735903 1.先在窗体上放置部分一的控件,这里是TreeView控件,然后把它的 Dock 属性设置为 Le ...

  8. Asp.Net 构架(Http Handler 介绍) - Part.2

    原文地址:http://www.cnblogs.com/JimmyZhang/archive/2007/09/15/894124.html 引言 在 Part.1 Http请求处理流程 一文中,我们了 ...

  9. java 自定义鼠标图标

    由于截图截不了,所以看不了图.源码如下: import java.awt.Cursor; import java.awt.Image; import java.awt.Point; import ja ...

  10. Js获取元素样式值(getComputedStyle&currentStyle)兼容性解决方案

    因为:style(document.getElementById(id).style.XXX)只能获取元素的内联样式,内部样式和外部样式使用style是获取不到的. 一般js获取内部样式和外部样式使用 ...