封装一个自己的 Ajax小框架

框架代码如下:

// 使用封装方法的人只关心提供http的请求方法,url地址,数据,成功和失败的回调方法

// 类的构造定义,主要职责就是新建出 XMLHttpRequest 对象
var MyXMLHttpRequest = function () {
    var xmlhttprequest;
    if (window.XMLHttpRequest) {
        xmlhttprequest = new XMLHttpRequest();
        if (xmlhttprequest.overrideMimeType) {
            xmlhttprequest.overrideMimeType("text/xml");
        }
    } else if (window.ActiveXObject) {
        var activeName = ["MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
        for (var i = 0; i < activeName.length; i++) {
            try {
                xmlhttprequest = new ActiveXObject(activeName[i]);
                break;
            } catch (e) {

            }
        }
    }
    if (xmlhttprequest == undefined || xmlhttprequest == null) {
        alert("XMLHttpRequest对象创建失败!");
    } else {
        this.xmlhttp = xmlhttprequest;
    }
}

//用户发送请求的方法
MyXMLHttpRequest.prototype.send = function (method, url, data, callback, failback) {

    if (this.xmlhttp != undefined && this.xmlhttp != null) {
        method = method.toUpperCase();
        if (method != "GET" && method != "POST") {
            alert("HTTP的请求方法必须是GET或POST");
            return;
        }
        if (url == null || url == undefined) {
            alert("HTTP的请求地址必须设置!");
            return;
        }
        var tempxmlhttp = this.xmlhttp;

        this.xmlhttp.onreadystatechange = function () {
            if (tempxmlhttp.readyState == 4) {
                if (tempxmlhttp.status == 200) {
                    var responseText = tempxmlhttp.responseText;
                    var responseXML = tempxmlhttp.responseXML;

                    if (callback == undefined || callback == null) {
                        alert("没有设置处理数据正确返回方法!");
                        alert("返回的数据:" + responseText)
                    } else {
                        callback(responseText, responseXML);
                    }
                } else {
                    if (failback == undefined || failback == null) {
                        alert("没有设置处理数据正确返回的方法!");
                    } else {
                        failback(tempxmlhttp.status, tempxmlhttp.statusText);
                    }
                }
            }
        }

        //解决缓存的转换
        if (url.indexOf("?") >= 0) {
            url = url + "&t=" + (new Date()).valueOf();
        } else {
            url = url + "?t=" + (new Date()).valueOf();
        }

        //解决跨域的问题
        if (url.indexOf("http://") >= 0) {
            url.replace("?", "&");
            url = "Proxy?url=" + url;
        }

        this.xmlhttp.open(method, url, true);

        //如果是POST方式,需要设置请求头
        if (method == "POST") {
            this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        }

        //提交请求
        this.xmlhttp.send(data);
    } else {
        alert("XMLHttpRequest对象创建失败,无法发送数据!");
    }
}

//放弃AJAX请求
MyXMLHttpRequest.prototype.abort = function () {
    this.xmlhttp.abort();
}

调用方式如下:

1. 引用js
2. new 一个自定义的 XMLHttpRequest 对象
3. 使用里面的 send 方法进行数据提交
4. 构造 callback 回调处理函数,与 failback 失败的 回调函数

<script src="ajax.js" type="text/javascript"></script>
<script type="text/javascript">
        function ValidUser() {
            //获取客户端内容
            var userName = document.getElementById("UserName").value;
            //进行编码解决 中文乱码
            userName = encodeURI(encodeURI(userName));

            var xmlhttp = new MyXMLHttpRequest();

            xmlhttp.send("POST", "AjaxRequst.ashx", "name="+userName, callback, failback);
          //xmlhttp.send("GET", "AjaxRequst.ashx?name="+userName, "", callback, failback);
        }
        function callback(responseText, responseXML) {
            //纯文件数据的接受方法
            var message = responseText;

            //将返回的内容添加到DIV层里
            var div = document.getElementById(‘message‘);
            div.innerHTML = message;
        }
        function failback(status, statusText) {
            alert(status +"---"+ statusText);
        }
</script>

时间: 2024-08-24 16:12:56

封装一个自己的 Ajax小框架的相关文章

分析一个类似于jquery的小框架

在网上下了一个类似于jQuery的小框架,分析源码,看看怎么写框架. 选择器Select //用沙箱闭包其整个代码,只有itcast和I暴漏在全局作用域 (function( window , undefined){ //Itcast函数,参数:selector.返回值一个Itcast对象,功能:new Itcast.prototype.init() function Itcast(selector){ return new Itcast.prototype.init(); } // Itcas

自己封装的一个Ajax小框架

在经历了Jsp实训的惨痛教训后,特意花了点时间学习Ajax,学完后自我感觉良好,于是写了如下一个小框架: 1 /** 2 * frameAjax 3 * 4 * 参数: 5 * paramsObj: Json 6 * required params: 7 * type:请求参数类型(String) 8 * url:请求地址(String) 9 * data:请求参数(Json),data可为空值. 10 * success:请求回调(Function) 11 * async:表示请求是否异步处理

分析一个类似于jquery的小框架 (2)

核心构造函数 (function ( window, undefined ) { // 定义Itcast构造函数 function Itcast ( selector ) { return new Itcast.fn.init( selector ); } Itcast.fn = Itcast.prototype = { constructor: Itcast, type: 'Itcast', length: 0, // 核心模块内容 init: function ( selector ) {

实现AOP功能的封装与配置的小框架

内容 java基础巩固笔记 - 实现AOP功能的封装与配置的小框架 设计(目录): XXX = java.util.ArrayList中 代码 Advice接口 MyAdvice类 BeanFactory类 ProxyFactoryBean类 AopFrameWorkTest类 输出 本文通过是动态代理实现的AOP功能的封装与配置的小框架.加深对动态代理和AOP编程的理解 获取源码,学习交流,那就加入小编的学习交流群吧!616 959 444 设计 根据配置文件的键xxx对应的值(类全名)创建相

封装一个类似jquery的ajax方法

//封装一个类似jquery的ajax方法,当传入参数,就可以发送ajax请求 //参数格式如下{ // type:"get"/"post", // dataType:"json"/"jsonp", // url:"地址", // data:{key:value} // success:function(){ // } // } //还需要一个跨域方法,可以访问远程服务器的数据 function myAja

封装一个Ajax工具函数

/*封装一个ajax工具函数*/ window.$ = {}; /*通过$定义一个ajax函数*/ /* * 1. type   string   请求的方式  默认是get * 2. url    string   请求地址  接口地址 * 3. async  boolean  默认的是true * 4. data   object   {}请求数据 * * 5.success function  成功回调函数 * 6.error   function  失败的回调函数 * */ $.ajax

基于ionic框架封装一个图片轮播指令的几点

在这里我想在项目中封装一个图片轮播的指令 (本项目使用的是ionic框架) 1)定义指令 define(['app'],function(myapp){ myapp.directive('myslidebanner',['$state',function(s){ return{ templateUrl:'directives/slide-banner/slide-banner.html', scope:{ banimg:'=',//数据的来源 }, link:function(s,el,atr)

java创建一个简单的小框架frame

import java.awt.*; import javax.swing.*; public class SimpleFrameTest { public static void main(String[] args) { EventQueue.invokeLater(new Runnable(){ // 开一个线程 public void run() { SimpleFrame frame = new SimpleFrame(); frame.setTitle("记事本"); //

封装ajax小工具:

1 ajax-lib/ajaxutils.js: 2 3 // 创建request对象 4 function createXMLHttpRequest() { 5 try { 6 return new XMLHttpRequest();//大多数浏览器 7 } catch (e) { 8 try { 9 return ActvieXObject("Msxml2.XMLHTTP");//IE6.0 10 } catch (e) { 11 try { 12 return ActvieXOb