jquery ajax 原理实现一个简单ajax实例

对于Ajax来说,JQuery是一个不可多得的好JS库,但是很多朋友并不了解Jquery对Ajax的实现过程,或者说不太了解,这点CG在此是不提倡的,CG写下面代码一方面是为了解决一位网友的疑问,同时也希望那些如果想在Jquery技术上有深入提高的朋友能够多看看Jquery源代码。

下面是简单实现的一个Ajax支持类,有不明白的话可以发起提问和留言。

 代码如下 复制代码

 /**
 * 名称:Ajax支持javascript类
 * 功能:用于对页面实现Ajax支持,简单封装Ajax请求
 * 创建时间:2010-01-14
 * 作者:CG
 */
//以下为通用函数或对象
//是否是IE
var isIE = (document.all) ? true : false;
 
//$ id选择器
var $ = function(id) {
    return "string" == typeof id ? document.getElementById(id) : id;
};
//Class  类对象
var Class = {
    create: function() {
        return function() { this.initialize.apply(this, arguments); }
    }
};
//事件函数绑定
var Bind = function(object, fun) {
    return function() {
        return fun.apply(object, arguments);
    }
};
 
//全局Ajax对象
//用于AjaxSupport对象调用
var $ajax = function(obj){
    //错误信息
    if(undefined == obj.error){
        obj.error = ajaxError;
    }
    //创建新的对象,此处可以使用单例来实现,减少资源消耗
    new AjaxSupport(obj);
};
 
//通用Ajax错误显示
function ajaxError(msg){
    alert(msg);
}
 
var AjaxSupport = Class.create();
AjaxSupport.prototype ={
    /**初始化方法
     * 参数: obj 调用对象
     */
    initialize: function(obj){
        this._xmlHttp = null;
        //URL对象
        this._url = obj.url;
        //请求方法对象
        this._method = obj.method;
        //请求方式
        this._asyn= obj.asyn;
        //请求数据
        this._data= obj.data;
        //请求成功
        this._success = obj.success;
        //错误
        this._error = obj.error;
        //初始化HttpRequest
        this._initHttpRequest();
        //开始请求
        this._ajaxRequest();
    },
    //请求状态变化
    _readyStateChange: function() {
        //只判断是4的情况,其他情需要另行设置
        if(4 == this._xmlHttp.readyState){
            //请求成功
            if(200 == this._xmlHttp.status){
                if(undefined != this._success){
                    //将请求发送给调用者
                    this._success(this._xmlHttp.responseXML);
                }
            }
            // 错误,或返回结果非200
            else{
                if(undefined != this._error){
                    this._error("Error:Server Internal Error!");
                }
            }
        }
    },
 
    //开始Ajax请求
    _ajaxRequest: function() {
        //打开请求
        try{
            //打开请求
            this._xmlHttp.open(this._method , this._url ,this._asyn);
        }catch(e){
            //打开请求错误
            if(undefined != this._error){
                this._error("Error:Openning Ajax Request Error!");
            }
        }
        try{
            //发送请求
            this._xmlHttp.send(this._data);
        }
        catch(e){
            //发送数据错误
            if(undefined != this._error){
                this._error("Error:Sending Ajax Request Error!");
            }
        }
    },
 
    //初始化HttpRequest对象
    _initHttpRequest: function(){
        //初始化HTTPReqest
        if(!isIE){//FF opera safari
            this._xmlHttp = new XMLHttpRequest();
        }else{//IE
            try{//IE6+
                this._xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
            }catch(e){
                try{//IE5.5+
                    this._xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                }catch(e){
                    //浏览器不支持
                    if(undefined != this._error){
                        this._error("Sorry! Your Browser dose not Support Ajax!");
                    }
                }
            }
        }
        //事件绑定
        if(null != this._xmlHttp) {
            //绑定状态改变事件
            this._xmlHttp.onreadystatechange = Bind(this, this._readyStateChange);
        }else{
            //绑定事件调用错误信息
            if(undefined != this._error){
                this._error("Error: init Ajax Object Error!");
            }
        }
    }
}

以下是简单的调用代码,相信用过Jquery的朋友觉得很类似吧?

 代码如下 复制代码

function testAjax() {
    var req = "text=" + $("txtName").value;
    //对象调用Ajax测试
    $ajax({
        url:"AjaxTest",
        method:"post",
        asyn:true,
        data:req,
        success: function(obj){
        //这里测试输出数据,不作XML解析
            $("msg").innerHTML = obj;
        },
        error: function(msg){
        //错误信息显示
            $("msg").innerHTML = msg;
        }
    });
}

时间: 2024-12-20 16:27:01

jquery ajax 原理实现一个简单ajax实例的相关文章

一个简单Ajax类库及使用方法实例分析_AJAX相关

本文实例讲述了一个简单Ajax类库及使用方法.分享给大家供大家参考,具体如下: ajax.js function Ajax(recvType){ var aj=new Object(); aj.recvType=recvType ? recvType.toUpperCase() : 'HTML' //HTML XML aj.targetUrl=''; aj.sendString=''; aj.resultHandle=null; aj.createXMLHttpRequest=function(

一个简单Ajax类库及使用方法实例分析

本文实例讲述了一个简单Ajax类库及使用方法.分享给大家供大家参考,具体如下: ajax.js function Ajax(recvType){ var aj=new Object(); aj.recvType=recvType ? recvType.toUpperCase() : 'HTML' //HTML XML aj.targetUrl=''; aj.sendString=''; aj.resultHandle=null; aj.createXMLHttpRequest=function(

深入实践Spring Boot1.3.2 一个简单的实例

1.3.2 一个简单的实例 Spring Boot的官方文档中提供了一个最简单的Web实例程序,这个实例只使用了几行代码,如代码清单1-3所示.虽然简单,但实际上这已经可以算作是一个完整的Web项目了. 代码清单1-3 Spring Boot简单实例 package springboot.example;   import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigu

使用jQuery和PHP构建一个受Ajax驱动的Web页面

大多数 PHP 开发人员都是以老式的方法学习技能.他们一般先学习如何定义和构建简单 的 PHP 页面,然后再了解如何将这些页面连接到简单的 MySQL 表,于是就可以由此进行自 己的开发了.随着技能水平的提高,他们还逐渐学会了如何创建更为复杂的 PHP 功能,以及 如何连接 MySQL 内的表并执行其他高级任务. 在这个过程中,他们有可能还会掌握 一些客户端技能来将 Web 应用程序投入使用.也有可能学会有关 XHTML 或 CSS 甚至一些 JavaScript 编程的知识.随着所参与项目的种

用jquery的方法制作一个简单的导航栏_jquery

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>学习导航栏的制作</title> <script src="http://code.jquery.com/jquery-1.10.2.js"></script> <script> $(document).ready(function() {

ajax原理总结附简单实例及其优点_AJAX相关

在工作中用了Ajax N多次了,也看过一些相关方面的书籍,也算是认识了它,但是一直没有认真总结和整理过相关的东东,失败! 近有闲情,将之总结如下: [名称] Ajax是Asynchronous JavaScript and XML(以及 DHTML 等)的缩写. 详情请移步Ajax: A New Approach to Web Applications [原理] 简单一些,就是通过使用XmlHttpRequest对象向服务器发送异步请求,获取返回的数据,并使用Javascript和DOM操作页面

ajax原理总结附简单实例及其优点

在工作中用了Ajax N多次了,也看过一些相关方面的书籍,也算是认识了它,但是一直没有认真总结和整理过相关的东东,失败! 近有闲情,将之总结如下: [名称] Ajax是Asynchronous JavaScript and XML(以及 DHTML 等)的缩写. 详情请移步Ajax: A New Approach to Web Applications [原理] 简单一些,就是通过使用XmlHttpRequest对象向服务器发送异步请求,获取返回的数据,并使用Javascript和DOM操作页面

jQuery中ajax的load()与post()方法实例详解_jquery

本文实例讲述了jQuery中ajax的load()与post()方法.分享给大家供大家参考,具体如下: 一.load()方法 在jQuery ajax的load()方法能够载入远程 HTML 文件代码并插入至 DOM 中,这个与post,get还是有一点的区别,但可以快速在页面加载时就加载一个页面的html保存到dom中并且可执行哦. load()方法默认使用 GET 方式, 如果传递了data参数则使用Post方式. 传递附加参数时自动转换为 POST 方式.jQuery 1.2 中,可以指定

一个简单例子教你揭开AJAX神秘面纱

ajax 本文通过一个简单的例子来说明如何在IE6中使用AJAX技术.在这例子中,客户端每隔十秒,从服务器端取回一个随机的字符串,在不重新刷新页情况下,自动更新部分页面内容.例子仅用到了两个jsp文件,client.jsp及server.jsp. AJAX,即"Asynchronous JavaScript And XML"的缩写,可翻译为异步JavaScript及XML技术.其核心是一个寄宿在浏览器中名为XMLHTTPRequest的类.通过此类,可以做到无需提交表单就可以实现与服务