经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
使用JavaScript?定义自己的ajax函数
来源:jb51  时间:2021/11/24 19:10:28  对本文有异议

由于用原生js的方式发起的网络请求,都是以查询字符串的形式,提交给服务器的,用户以对象的形式提交参数的话会比较方便,所以需要把用户传递过来的参数对象进行处理,定义resolveData的函数,设置形参接收参数,遍历里面的对象,把键和值用=的方式进行拼接,然后把所得的值添加进空的数组即可;最后用&符号把数组的每一项进行分割,并返回;定义itheima函数,设置形参用于接收用户传递过来的配置对象参数,创建xhr对象,把传递过来的参数传递给处理参数的函数,把得到的返回值,给一个变量,由于是不同的请求,所以要进行判断,首先是GET请求,判断参数里面的method是否全等于GET,由于传递过来的参数有可能是小写,所以通过toUpperCase方法转化为大写,如果条件成立调用open方法,把对应的值填入即可,调用send函数;POST也一样,只是提交数据多了参数和POST请求需要“Content-Type”头指定请求主题的MIME类型。最后调用监听事件即可;

  1. function resolveData(data) {
  2. var arr = [];
  3. for (var k in data) {
  4. var str = k + "=" + data[k];
  5. arr.push(str)
  6. }
  7. return arr.join("&")
  8. }
  9. function itheima(options) {
  10. var xhr = new XMLHttpRequest();
  11. var qs = resolveData(options.data);
  12. if (options.method.toUpperCase() === "GET") {
  13. xhr.open(options.method, options.url + "?" + qs);
  14. xhr.send();
  15. } else if(options.method.toUpperCase() === "POST"){
  16. xhr.open(options.method, options.url)
  17. xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
  18. xhr.send(qs)
  19. }
  20. xhr.onreadystatechange = function () {
  21. if (xhr.readyState === 4 && xhr.status === 200) {
  22. var result = JSON.parse(xhr.responseText)
  23. options.success(result);
  24. }
  25. }
  26. }

最后测试一下是否能成功~

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>测试界面</title>
  8. <script src="itheima.js"></script>
  9. </head>
  10. <body>
  11. <script>
  12. itheima({
  13. method:"GET",
  14. url:"http://www.liulongbin.top:3006/api/getbooks",
  15. data:{
  16. id:1
  17. },
  18. success:function(res){
  19. console.log(res);
  20. }
  21. });
  22. </script>
  23. </body>
  24. </html>

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注w3xue的更多内容!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号