如何用JavaScript编写自定义的Ajax函数?
- 内容介绍
- 文章标签
- 相关推荐
本文共计695个文字,预计阅读时间需要3分钟。
由于原生JavaScript的请求方式都是基于字符串格式的,用户以对象形式提交的参数需要先转换为字符串,再发送给服务器。因此,需要定义一个函数`r`来处理用户传递的对象参数,将其转换为查询字符串。以下是`r`函数的一个简单实现:
javascriptfunction r(params) { let queryString=''; for (let key in params) { if (params.hasOwnProperty(key)) { let value=encodeURIComponent(params[key]); queryString +=`${key}=${value}&`; } } return queryString.slice(0, -1); // 移除最后一个&符号}
使用示例:
javascriptlet params={ name: '张三', age: 30, city: '北京'};
let queryString=r(params);console.log(queryString); // 输出: name=%E5%BC%A0%E4%B8%89&age=30&city=%E5%8C%97%E4%BA%AC
由于用原生js的方式发起的网络请求,都是以查询字符串的形式,提交给服务器的,用户以对象的形式提交参数的话会比较方便,所以需要把用户传递过来的参数对象进行处理,定义resolveData的函数,设置形参接收参数,遍历里面的对象,把键和值用=的方式进行拼接,然后把所得的值添加进空的数组即可;最后用&符号把数组的每一项进行分割,并返回;定义itheima函数,设置形参用于接收用户传递过来的配置对象参数,创建xhr对象,把传递过来的参数传递给处理参数的函数,把得到的返回值,给一个变量,由于是不同的请求,所以要进行判断,首先是GET请求,判断参数里面的method是否全等于GET,由于传递过来的参数有可能是小写,所以通过toUpperCase方法转化为大写,如果条件成立调用open方法,把对应的值填入即可,调用send函数;POST也一样,只是提交数据多了参数和POST请求需要“Content-Type”头指定请求主题的MIME类型。最后调用监听事件即可;
function resolveData(data) { var arr = []; for (var k in data) { var str = k + "=" + data[k]; arr.push(str) } return arr.join("&") } function itheima(options) { var xhr = new XMLHttpRequest(); var qs = resolveData(options.data); if (options.method.toUpperCase() === "GET") { xhr.open(options.method, options.url + "?" + qs); xhr.send(); } else if(options.method.toUpperCase() === "POST"){ xhr.open(options.method, options.url) xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded") xhr.send(qs) } xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { var result = JSON.parse(xhr.responseText) options.success(result); } } }
最后测试一下是否能成功~
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta www.liulongbin.top:3006/api/getbooks", data:{ id:1 }, success:function(res){ console.log(res); } }); </script> </body> </html>
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注自由互联的更多内容!
本文共计695个文字,预计阅读时间需要3分钟。
由于原生JavaScript的请求方式都是基于字符串格式的,用户以对象形式提交的参数需要先转换为字符串,再发送给服务器。因此,需要定义一个函数`r`来处理用户传递的对象参数,将其转换为查询字符串。以下是`r`函数的一个简单实现:
javascriptfunction r(params) { let queryString=''; for (let key in params) { if (params.hasOwnProperty(key)) { let value=encodeURIComponent(params[key]); queryString +=`${key}=${value}&`; } } return queryString.slice(0, -1); // 移除最后一个&符号}
使用示例:
javascriptlet params={ name: '张三', age: 30, city: '北京'};
let queryString=r(params);console.log(queryString); // 输出: name=%E5%BC%A0%E4%B8%89&age=30&city=%E5%8C%97%E4%BA%AC
由于用原生js的方式发起的网络请求,都是以查询字符串的形式,提交给服务器的,用户以对象的形式提交参数的话会比较方便,所以需要把用户传递过来的参数对象进行处理,定义resolveData的函数,设置形参接收参数,遍历里面的对象,把键和值用=的方式进行拼接,然后把所得的值添加进空的数组即可;最后用&符号把数组的每一项进行分割,并返回;定义itheima函数,设置形参用于接收用户传递过来的配置对象参数,创建xhr对象,把传递过来的参数传递给处理参数的函数,把得到的返回值,给一个变量,由于是不同的请求,所以要进行判断,首先是GET请求,判断参数里面的method是否全等于GET,由于传递过来的参数有可能是小写,所以通过toUpperCase方法转化为大写,如果条件成立调用open方法,把对应的值填入即可,调用send函数;POST也一样,只是提交数据多了参数和POST请求需要“Content-Type”头指定请求主题的MIME类型。最后调用监听事件即可;
function resolveData(data) { var arr = []; for (var k in data) { var str = k + "=" + data[k]; arr.push(str) } return arr.join("&") } function itheima(options) { var xhr = new XMLHttpRequest(); var qs = resolveData(options.data); if (options.method.toUpperCase() === "GET") { xhr.open(options.method, options.url + "?" + qs); xhr.send(); } else if(options.method.toUpperCase() === "POST"){ xhr.open(options.method, options.url) xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded") xhr.send(qs) } xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { var result = JSON.parse(xhr.responseText) options.success(result); } } }
最后测试一下是否能成功~
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta www.liulongbin.top:3006/api/getbooks", data:{ id:1 }, success:function(res){ console.log(res); } }); </script> </body> </html>
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注自由互联的更多内容!

