js原生Ajax的封装与使用

一、原生Ajax代码的封装如下:

(function() {

    var XHR = {
        createStandardXHR: function() {
            return new XMLHttpRequest();
        },
        createIEXHR: function () {
            return new ActiveXObject("Microsoft.XMLHTTP");
        },
        createErrorXHR: function () {
            alert("Your browser does not support XMLHTTP.");
            return null;
        },
        createXHR: function() { //创建XMLHttpRequest对象
            var xhr = null;
            if (window.XMLHttpRequest) {
                this.createXHR = this.createStandardXHR; // Firefox, Opera 8.0+,Safari,IE7+
            } else {
                this.createXHR = this.createIEXHR; // IE5、IE6
            }
            try {
                xhr = this.createXHR();
            } catch (e) {
                this.createXHR = this.createErrorXHR;
                xhr = this.createXHR();
            }
            return xhr;
        },
        ajax: function(opts) {
            var xhr = this.createXHR(),
                ajaxMethod = (opts.type || "GET").toUpperCase(),
                isPost = ajaxMethod == "POST",
                data = this.param(opts.data),
                url = this.buildUrlParam(opts.url, data, isPost);
            xhr.open(ajaxMethod, url, opts.async == undefined ? true : opts.async);
            if (isPost) {
                xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            }
            if (opts.contentType) {
                xhr.setRequestHeader("Content-type", opts.contentType);
            }
            var stateChange = this.xhrStateChange;
            xhr.onreadystatechange = function() {
                stateChange(xhr, opts.success, opts.error);
            }
            xhr.send(isPost ? data : null);
        },
        buildUrlParam: function(url,data,isPost) {
            if (data && !isPost) {
                if (url.indexOf("?") < 0) {
                    url += "?" + data;
                } else {
                    url += "&" + data;
                }
            }
            return url;
        },
        param: function(data) {
            if (!data) {
                return null;
            }

            if (typeof data !== "object") {
                return data;
            }
            var postData = [];
            for (var key in data) {
                postData.push(key+"="+data[key]);
            }

            return postData.join("&");
        },
        xhrStateChange: function(xhr, successFn, failFn) {
            if (xhr.readyState == 4) { // 4 = "loaded"
                if (xhr.status == 200) { // 200 = OK
                    successFn(xhr.responseText);
                } else {
                    failFn.call(xhr, xhr.statusText, xhr.status);
                }
            } else {
                failFn.call(xhr, xhr.statusText, xhr.status);
            }
        }
    };

    window.ajax = function(opts) {
        XHR.ajax.call(XHR, opts);
    };
})();

二、方法如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="gb2312" />
    <title>ajax demo02 </title>
    <style type="text/css">
        .msg {
            height: 30px;
            color: #ff6347;
            margin-top: 10px;
        }
    </style>
</head>
<body>
    <div>员工编号:<input type="text" id="txtNumber" /><input id="btnSearch" type="button" value="查询" /></div>
    <div id="searchResult" class="msg"></div>
    <div style="margin-top: 100px;">员工姓名:<input type="text" id="txtName" /><input id="btnSave" type="button" value="保存" /></div>
    <div id="saveResult" class="msg"></div>
    <script src="ajax.js"></script>
    <script type="text/javascript">
        getDom("btnSearch").onclick = function () {
            ajax({
                url: "ajax_server/service.aspx?action=search",
                data: {
                    number: encodeURIComponent(getDom("txtNumber").value)
                },
                success: function (data) {
                    getDom("searchResult").innerHTML = data;
                },
                error: function (message, code) {
                    getDom("searchResult").innerHTML = "出错," + message;
                }
            });
        }

        getDom("btnSave").onclick = function () {
            ajax({
                url: "ajax_server/service.aspx?action=save",
                type: "post",
                data: { Name: encodeURIComponent(getDom("txtName").value) },
                success: function (data) {
                    getDom("saveResult").innerHTML = data;
                },
                error: function (message, code) {

                }
            });
        }

        function getDom(id) {
            return document.getElementById(id);
        }
    </script>
</body>
</html>

三、代码及Demo下载

时间: 2024-08-12 23:16:41

js原生Ajax的封装与使用的相关文章

原生ajax与封装的ajax使用方法

当我们不会写后端接口来测试ajax时,我们可以使用node环境来模拟一个后端接口. 1.模拟后端接口可参考http://www.cnblogs.com/heyujun-/p/6793900.html网站整站开发小例子,在打开命令窗口并转到所在项目文件夹下在命令行中输入npm install express --save,安装express中间件. 2.把当中的app.js的内容换成 var express=require('express'); //var path=require('path'

JS原生Ajax请求

摘录一个JS原生Ajax请求行为,原文地址:http://caibaojian.com/ajax-jsonp.html ajax({ url: "./TestXHR.aspx", //请求地址 type: "POST", //请求方式 data: { name: "super", age: 20 }, //请求参数 dataType: "json", success: function (response, xml) { //

Js原生Ajax和Jquery的Ajax

一.Ajax概述 1.什么是同步,什么是异步 同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待卡死状态 异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都可以随意做其他事情,不会被卡死 2.Ajax的运行原理 页面发起请求,会将请求发送给浏览器内核中的Ajax引擎,Ajax引擎会提交请求到服务器端,在这段时间里,客户端可以任意进行任意操作,直到服务器端将数据返回给Ajax引擎后,会触发你设置的事件,从而执行自定义的js逻辑代码完成某种页面1 功能. 二

JS原生Ajax,GET和POST

javascript/js的ajax的GET请求: <script type="text/javascript"> /* 创建 XMLHttpRequest 对象 */ var xmlHttp; function GetXmlHttpObject(){ if (window.XMLHttpRequest){ // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); }else

最详细的原生js实现ajax的封装

1. ajax的介绍 1.1 含义 ajax 的全称是Asynchronous JavaScript and XML 简单理解下:ajax就是异步的js和服务端的数据 1.2 组成 异步的js:事件,对象等 其他js:数据处理和解析的js 服务器的载体:xhr对象 服务端的数据:json,xhr,html,txt等字符型数据 1.3 作用 它作为前端向后端发送数据请求的重要手段,可以实现网页无刷新加载数据. 1.4 利弊 与传统的form表单的get和post方式相比较,ajax的优点很明显 优

js原生ajax与jquery的ajax的用法区别

什么是ajax和原理? AJAX 是一种用于创建快速动态网页的技术. 通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据 XMLHttpRequest对象的基本属性: onreadtstatechange 每次状态改变所触发事件的时间处理程序. responseText 从服务器响应返回以字符串为形式的数据 responseXML 从服务器响应返回以XML(DOM兼容文档)数据对象 status 从服务器返回的数字代码 100-199 用于指定客户端应相应的某些动作. 2

js 原生 ajax

//js ajax function Ajax(url,type,data,comFun,sucFun,errFun) { //1.创建XMLHttpRequest对象 var xmlHttpRequest; if(window.ActiveXObject) //IE低版本 { xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest)//Firefox等 { xm

原生ajax 方法封装

封装的技巧:将公共的代码提取出来,将可能会变化的代码,通过参数传递; 例如:请求服务器的方式.服务器地址.携带的参数.以及期望什么类型的数据,都得通过参数传递: 下面是封装的ajax操作的代码: 原文地址:https://www.cnblogs.com/lxc-bky/p/9568217.html

js原生ajax请求get post笔记

开拓新领域,贵在记录.下面记录了使用ajax请求的get.post示例代码 //ajax get 请求获取数据支持同步异步 var ajaxGet = function (reqUrl, params, callback, async) { var xhr = null; if(window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else if(window.ActiveXObject) { xhr = new ActiveXObject