博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
封装ajax支持get、post
阅读量:6853 次
发布时间:2019-06-26

本文共 4878 字,大约阅读时间需要 16 分钟。

为什么要封装ajax,因为……

for(var i=0;i<20;i++){

  $.ajax(……)

}

的时候,整个页面都卡死了,于是,我开始找答案。

后来,找到了,就是jquery的ajax属于全局,当上文不执行完毕,其他的都动不了。于是乎有了封装ajax,将ajax作为局部使用,即可解决掉。

       function ajax(options) {                options = options || {};                options.type = (options.type || "GET").toUpperCase();                options.dataType = options.dataType || "json";                var params = formatParams(options.data);                var xhr;                //第一步                if (window.ActiveXObject) {//返回true为ie浏览器内核,否则不是ie内核                    //为ie内核创建传输对象的方式                     xhr = new window.ActiveXObject("Microsoft.XMLHTTP");                } else {                    //为非ie 内核浏览器创建传输对象的方式                    xhr = new XMLHttpRequest();                }                //接收 - 第三步                xhr.onreadystatechange = function () {                    if (xhr.readyState == 4) {                        var status = xhr.status;                        if (status >= 200 && status < 300) {                            options.success && options.success(xhr.responseText, xhr.responseXML);                        } else {                            options.error && options.error(status);                        }                    }                }                //连接 和 发送 - 第二步                if (options.type == "GET") {                    xhr.open("GET", options.url + "?" + params, true);                    xhr.send(null);                } else if (options.type == "POST") {                    xhr.open("POST", options.url, true);                    //设置表单提交时的内容类型                    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");                    xhr.send(params);                }            }            //格式化参数            function formatParams(data) {                var arr = [];                for (var name in data) {                    arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name]));                }                arr.push(("v=" + Math.random()).replace(".", ""));                return arr.join("&");            }

  还有一个精简后的

function ajax(opt) {        opt = opt || {};         opt.method = opt.method.toUpperCase() || 'POST';         opt.url = opt.url || '';         opt.async = opt.async || true;         opt.data = opt.data || null;        opt.success = opt.success || function () {};         var xmlHttp = null;         if (XMLHttpRequest) {             xmlHttp = new XMLHttpRequest();         }         else {             xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');         }var params = [];         for (var key in opt.data){             params.push(key + '=' + opt.data[key]);         }         var postData = params.join('&');         if (opt.method.toUpperCase() === 'POST') {             xmlHttp.open(opt.method, opt.url, opt.async);             xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');             xmlHttp.send(postData);         }         else if (opt.method.toUpperCase() === 'GET') {             xmlHttp.open(opt.method, opt.url + '?' + postData, opt.async);             xmlHttp.send(null);         }         xmlHttp.onreadystatechange = function () {             if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {                 opt.success(xmlHttp.responseText);             }         };     }

  但是呢,如果用惯了jq的,我们其实也可以这样封装

function ajax(){   var ajaxData = {     type:arguments[0].type || "GET",     url:arguments[0].url || "",     async:arguments[0].async || "true",     data:arguments[0].data || null,     dataType:arguments[0].dataType || "text",     contentType:arguments[0].contentType || "application/x-www-form-urlencoded",     beforeSend:arguments[0].beforeSend || function(){},     success:arguments[0].success || function(){},     error:arguments[0].error || function(){}   }   ajaxData.beforeSend()   var xhr = createxmlHttpRequest();    xhr.responseType=ajaxData.dataType;   xhr.open(ajaxData.type,ajaxData.url,ajaxData.async);    xhr.setRequestHeader("Content-Type",ajaxData.contentType);    xhr.send(convertData(ajaxData.data));    xhr.onreadystatechange = function() {      if (xhr.readyState == 4) {        if(xhr.status == 200){         ajaxData.success(xhr.response)       }else{         ajaxData.error()       }      }   }  }   function createxmlHttpRequest() {    if (window.ActiveXObject) {      return new ActiveXObject("Microsoft.XMLHTTP");    } else if (window.XMLHttpRequest) {      return new XMLHttpRequest();    }  }   function convertData(data){   if( typeof data === 'object' ){     var convertResult = "" ;      for(var c in data){        convertResult+= c + "=" + data[c] + "&";      }      convertResult=convertResult.substring(0,convertResult.length-1)     return convertResult;   }else{     return data;   } }

  调用方法就很简单了,看看需要的参数就知道了。

转载于:https://www.cnblogs.com/webSong/p/7224546.html

你可能感兴趣的文章
JS中的“!!”
查看>>
python之MySQL操作
查看>>
radioButton添加试题选项webview(二)
查看>>
Centos7 linux 安装 redis 遇到的几个问题
查看>>
Kohana的请求流
查看>>
Oracle 12c Sharding测试过程中的问题解决
查看>>
Oracle Index 索引监控
查看>>
Elasticsearch2.x 全文检索之——Match转换Bool Query
查看>>
NET联调
查看>>
noi.ac day6t1 queen
查看>>
作业四 任务分解(WBS)
查看>>
eclipse 创建maven 项目 动态web工程完整示例
查看>>
laravel中的命名公约规范及relation N+1问题
查看>>
Convolution of measures and one application
查看>>
逆序对 线段树&树状数组 (重制版)
查看>>
从此错位(相减)无计算
查看>>
RESTful API 设计最佳实践
查看>>
想要成为一个人,先按那个人的要求去做,你自然就成了那个人(转)
查看>>
Codeforces Round #425 (Div. 2) - A
查看>>
mysql学习【第12篇】:数据库之视图,触发器,事务等
查看>>