当前位置:   article > 正文

ajax+get+status,封装ajax支持get、post(示例代码)

ajax get status

为什么要封装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;

}

}

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/148123
推荐阅读
相关标签
  

闽ICP备14008679号