用原生js封装ajax,用原生js封装ajax

该博客详细介绍了JavaScript中封装的AJAX函数,包括GET和POST请求的实现,以及处理响应数据的方法。通过示例代码,展示了如何设置请求参数、处理数据类型和错误处理,帮助理解异步数据交互的基本流程。
摘要由CSDN通过智能技术生成

// ajax操作

/*options = {

type : "get|post", // 请求方式,默认 "get"

url : "xxx.php", // 请求资源的URL

async : true, // 是否异步请求,默认为 true

data : {}, // 向服务器传递的数据{username:"xiaoming", password:"abc", phone:"123"}

dataType : "text|json", // 预期从服务器返回的数据格式

success : function(data){},  // 请求成功执行的函数

error : function(errMsg){} // 请求失败执行的函数

}*/

function ajax(options) {

if (!options) // 未传递参数,结束函数执行

return;

// 获取请求的URL

var url = options.url;

if (!url) // 没有请求的服务器资源,结束函数执行

return;

// 获取请求方式

var method = options.type || "get";

// 是否异步

var async = options.async;

if (async === undefined)

async = true;

// 处理查询字符串

var queryString = null;

if (options.data) { // 有向服务器传递的数据,则连接查询字符串

queryString = [];

for (var attr in options.data) {

queryString.push(attr + "=" + options.data[attr]);

}

queryString = queryString.join("&");

}

// 如果是 get 提交数据,将数据用 ? 号串联在 url 中

if (method === "get" && queryString) {

url += "?" + queryString;

queryString = null;

}

// 创建核心对象

var xhr;

if (window.XMLHttpRequest)

xhr = new XMLHttpRequest();

else

xhr = new ActiveXObject("Microsoft.XMLHTTP");

// 建立连接

xhr.open(method, url, async);

// 如果要像表单一样POST提交数据,则设置请求头

if (method === "post")

xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

// 发送请求

xhr.send(queryString);

if (async) { // 异步

// 处理响应

xhr.onreadystatechange = function(){

if (xhr.readyState === 4) {

if (xhr.status === 200) {

// 获取响应文本

var data = xhr.responseText;

// 判断预期返回的数据格式

if (options.dataType === "json")

data = JSON.parse(data);

// 请求成功时数据处理业务

options.success && options.success(data);

} else {

// 请求失败处理情况

options.error && options.error(xhr.statusText);

}

}

}

} else { // 同步

if (xhr.status === 200) {

// 获取响应文本

var data = xhr.responseText;

// 判断预期返回的数据格式

if (options.dataType === "json")

data = JSON.parse(data);

// 请求成功时数据处理业务

options.success && options.success(data);

} else {

// 请求失败处理情况

options.error && options.error(xhr.statusText);

}

}

}

//封装完成后,根据自身情况选择

// 用于处理get请求

function get(url, data, success, dataType) {

ajax({

type : "get",

url : url,

data : data,

dataType : dataType,

success : success

});

}

// 用于处理post请求

function post(url, data, success, dataType) {

ajax({

type : "post",

url : url,

data : data,

dataType : dataType,

success : success

});

}

// 用于处理get请求,响应数据的格式为json格式

function getJSON(url, data, success) {

ajax({

type : "get",

url : url,

data : data,

dataType : "json",

success : success

});

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值