1 function resolveData(data) {
2 // ----------------- 实现方法1-------------
3 // let arr = [];
4 // for (const k in data) {
5 // const str = `${k}=${data[k]}`;
6 // arr.push(str);
7 // }
8 // -------------实现方法-2------------
9 let arr = Object.keys(data).map((k) => {
10 // Object.keys(data) 为获取data对象的 属性名 返回一个包含所有属性名的数组
11 // .map((k) ------------> 将包含属性名的数组 重新处理后 返回一个新数组 形参k为当前的循环项
12 return `${k}=${data[k]}`; //将结果返回 不要忘记 return
13 });
14 return arr.join("&"); //将返回的数组利用join方法拼接为 字符串
15 }
16
17 function ajndh(options) {
18 // -----------------------------------
19 // 创建xhr对象
20 const xhr = new XMLHttpRequest();
21 // 把传过来的data 对象 数据 转换为 查询字符串
22 const qs = resolveData(options.data);
23 // -------------------------------------------
24 // 判断请求的类型
25 if (options.method.toUpperCase() == "GET") {
26 // 发起get请求 参数在URL后面拼接
27 xhr.open(options.method, options.url + "?" + qs);
28 xhr.send();
29 } else if (options.method.toUpperCase() == "POST") {
30 // 发起post请求 设置请求的方式 和请求的地址
31 xhr.open(options.method, options.url);
32 // 发起post请求要设置 请求头文件
33 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
34 // 在send函数中 传送 对象转换后的 查询字符串
35 xhr.send(qs);
36 }
37 // --------------------------------------------
38 // 监听状态
39 xhr.onload = function () {
40 if (this.status == 200) {
41 // 把服务器响应的JSON数据 转换为 对象类型
42 const data = JSON.parse(xhr.responseText);
43 // 手动调用下服务器的成功属性 把data 传过去 以便用户调用
44 options.success(data);
45 }
46 };
47 }