【JS020】原生JS实现AJAX

news2024/11/28 16:43:08

日期:2022年12月14日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006
如果您想了解更多有关javascript的知识,那么请点《javascript学习的奇妙之旅》


文章目录

  • 一、AJAX定义与原理
  • 二、JS实现AJAX的代码
  • 三、调用示例


一、AJAX定义与原理

百度百科AJAXAsynchronous Javascript And XML(异步JavaScript和XML)在 2005年被Jesse James Garrett提出的新术语,用来描述一种使用现有技术集合的‘新’方法,包括: HTML 或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的XMLHttpRequest。 使用AJAX技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。

大白话:Web的运作原理是一次HTTP请求对应一个页面,而我们需要在不重载页面的前提下,更新页面数据。那么就要用JavaScript执行异步网络请求,接收到数据后,再用JavaScript更新页面,这就是所谓的AJAX。

在这里插入图片描述

二、JS实现AJAX的代码

function ajax(paramObj, okCallBack, errCallBack) {

    var xhr = null;
    if (window.XMLHttpRequest) {
        xhr = new XMLHttpRequest();
    } else {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    // 判断是否支持ajax
    if (xhr == null) {
        alert("您的浏览器不支持XMLHttp,请更新浏览器或改用其它浏览器后再使用");
    }

    // 请求类型
    var type = (paramObj.type || "GET").toUpperCase();
    // 数据类型
    var dataType = paramObj.dataType || "";
    // 请求接口
    var url = paramObj.url || "";
    // 是否异步请求
    var async = paramObj.async == false ? false : true;

    // 请求参数
    // 1、get  reqData = Null;
    // 2、post reqData应为'a=111&b=222c=asd'这种字符串格式;
    var reqData;
    if (type == "POST") {
        reqData = "";
        if (paramObj.data) {
            var paramData = paramObj.data;
            for (var name in paramData) {
                reqData += name + "=" + paramData[name] + "&";
            }
            reqData = reqData == "" ? "" : reqData.substring(0, reqData.length - 1)
        };
    } else {
        reqData = null;
    };

    // 请求接收
    xhr.onreadystatechange = function () {
        // 0:请求未处死花花
        // 1:服务器连接已建立
        // 2:请求已接收
        // 3:请求处理中
        // 4:请求已完成,且响应已就绪
        if (xhr.readyState == 4) {
            // 200:"OK"
            // 404:"未找到页面"
            if (xhr.status == 200) {
                okCallBack(xhr.responseText)
            } else {
                errCallBack(xhr.status);
            }
        }
    }

    // 发送请求
    if (type == "GET") {
        xhr.open("GET", url, async);
    } else {
        xhr.open("POST", url, async);
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    }
    xhr.send(reqData);

}

三、调用示例

 ajax({
      url: url,
      type: "post",
      data:{
          "a":"xxx",
          "b":"yyy"
      }
  }, function (res) {
      // console.log("res", res);
      // console.log(JSON.parse(res));
      // 成功
  }, function (err) {
      // 错误
      console.log(err);
  });

参考文章:
1、《ajax(Web数据交互方式) - 百度百科》
2、《菜鸟教程|AJAX 简介|》
3、《浅析JS中的AJAX》


版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/128314599

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/88142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TFT显示模组是什么?tft显示模组有什么功能?

TFT显示模组的出现,让手机屏幕成为一种刚需。但随着技术的发展,越来越多的厂商开始推出折叠屏手机,这也意味着手机屏幕的形态正在发生变化。在此背景下,折叠屏手机市场迎来爆发期。根据中国信通院数据,2020年上半年&am…

Kubernetes包管理器Helm的本质

“本质”类的文章,通常很难带流量。而且写起来非常吃力。那我为什么还要写?写作是对自己的锻炼。写作是让自己的思想更有深度的一种有效方式。如果你觉得这篇文章对你有帮助,也你麻烦你转发这篇文章,这是对我的帮助。谢谢。Kubern…

socket.io 使用protobuf 协议发送消息

一、服务端 1、maven引入netty-socketio <dependency><groupId>com.corundumstudio.socketio</groupId><artifactId>netty-socketio</artifactId><version>1.7.22</version></dependency> 2、服务端java代码 Service public…

艾美捷内皮细胞生长添加剂不同研究工具推荐

艾美捷Relia Tech内皮细胞生长添加剂可用于培养没有饲养细胞的杂交瘤细胞&#xff08;Pintus&#xff0c;1983&#xff09;。这些脑提取物中的活性因子已被鉴定为aFGF的变体&#xff08;Burgesse&#xff0c;1985&#xff09;。该ECGF产品补充了生理浓度的人rec.VEGF-A&#xf…

初识 Markdown编辑器

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

真兰仪表通过深交所注册:拟募资17.4亿 上半年净利下降27%

雷递网 雷建平 12月13日上海真兰仪表科技股份有限公司&#xff08;简称&#xff1a;“真兰仪表”&#xff09;日前通过注册&#xff0c;准备在深交所创业板上市。真兰仪表计划募资17.4亿元。其中&#xff0c;7.76亿用于真兰仪表科技有限公司燃气表产能扩建项目&#xff0c;6.12…

NFA的确定化

一、实验目的 &#xff08;1&#xff09;通过本次实验&#xff0c;加深对正则表达式、NFA、DFA及其识别的语言的理解&#xff1b; &#xff08;2&#xff09;掌握从NFA到DFA的转换&#xff0c;以及用子集法把NFA转换成DFA理论&#xff0c;编程实现将NFA&#xff08;不确定有穷…

SAP 事务代码BD20不能处理状态为51的IDoc

SAP 事务代码BD20不能处理状态为51的IDoc 对于SAP IDoc相关的事务代码比如WE02,WE19,BD87等都比较熟悉&#xff0c;因为使用的比较多。但是对于事务代码BD20却很少使用。 笔者在近期的一个项目上&#xff0c;听到客户的global team有使用该事务代码&#xff0c;设置成了一个job…

Oracle RMAN备份相关信息查询

查询 RMAN 备份状态主要是通过视图V$RMAN_STATUS 来进行&#xff0c;这个视图可以查询到 RMAN 执行的操作。 我们主要查看两列&#xff1a;OPERATION 和 STATUS。 OPERATION 的值有&#xff1a;RMAN、BACKUP、DELETE、CROSSCHECK、DELETE OBSOLETE等。 STATUS的值有&#xff1a…

中国电信携手华为建成全球首个支持5G RedCap联合测试能力的5G开放实验室

近日&#xff0c;中国电信物联网开放实验室宣布与华为共同完成了5G RedCap实验室技术验证&#xff0c;并建成了全球首个具备5G R17标准RedCap联合测试能力的开放实验室。 此次技术验证&#xff0c;为RedCap的规模商用奠定了坚实基础&#xff0c;有助于打造RedCap行业终端生态认…

良心总结!Git 各指令的本质,真是通俗易懂啊

1前言 作为当前世界上最强大的代码管理工具Git相信大家都很熟悉&#xff0c;但据我所知有很大一批人停留在clone、commit、pull、push...的阶段&#xff0c;是不是对rebase心里没底只敢用merge&#xff1f;碰见版本回退就抓瞎&#xff1f;别问我怎么知道的&#xff0c;问就是&…

什么是成熟的自动化运维平台?

本文首发于知乎&#xff0c;由嘉为蓝鲸原创。 商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 当企业遇到运维管理对象的急速增长&#xff0c;业务需求频繁变更等传统运维场景问题时&#xff0c;依靠手工运维已经远远满足不了需求&#xff0c;因此我们需要搭建…

2022,itbird的年终总结报告

最近公司要求个人在做年终总结了&#xff0c;趁着这个机会&#xff0c;也想对自己的2022年进行一下回顾总结&#xff0c;最重要的是&#xff0c;对2023的目标&#xff0c;可以有一个指引。 就从工作和生活两方面来讲吧。 1.工作 1.1 行业的状态 本人从事的是android开发工作…

Cuda个别库函数的兼容性 - shuffle\数学库\原子

兼容性针对的是不同的Cuda版本和设备计算能力(compute capability) shuffle 在C\C扩展一节 新版本函数见Cuda12.0 文档 __shfl_sync, __shfl_up_sync, __shfl_down_sync, and __shfl_xor_sync exchange a variable between threads within a warp. Supported by devices of …

信创入围认证详解

信创是一个统称概念&#xff0c;实际是把现有与信息技术相关的行业结合在一起&#xff0c;命名为“信息技术应用创新产业”&#xff0c;简称“信创”。一般来说&#xff0c;信创包括基础硬件、基础软件、应用软件、信息安全四大板块。其中&#xff0c;基础硬件主要包括&#xf…

让最近爆火的ChatGPT来谈谈,作为一个技术人该如何写好一篇技术博文

ChatGPT 是由 OpenAI 训练的一个大型语言模型。专门设计用于回答用户提出的问题&#xff0c;我可以提供有价值的信息&#xff0c;并帮助用户解决问题 下面的回答均来自ChatGPT CharGPT如何写好一篇技术博文&#xff1f;写技术博文需要具备那些能力就用java实现冒泡排序来写一篇…

C语言画贝塞尔曲线的函数

程序截图 简单说明 这个函数就是 void drawBezierCurve(COLORREF color, const unsigned int len, ...) color 是贝塞尔曲线的颜色&#xff0c;len 是画出贝塞尔曲线所需要的点的个数&#xff0c;最少 1 个&#xff0c;不要乱传。之后的参数传的就是画出贝塞尔曲线要的点&am…

大数据时代,数据实时同步解决方案的思考—最全的数据同步总结

F、 客户端开发&#xff0c;在maven中引入canal的依赖 com.alibaba.otter canal.client 1.0.21 代码示例&#xff1a; package com.example; import com.alibaba.otter.canal.client.CanalConnector; import com.alibaba.otter.canal.client.CanalConnectors; import c…

[附源码]Nodejs计算机毕业设计基于Web美食网站设计Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

C++ Reference: Standard C++ Library reference: Containers: map: map: begin

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/begin/ 公有成员函数 <map> std::map::begin C98 iterator begin(); const_iterator begin() const; C11 iterator begin() noexcept; const_iterator begin() const noexcept;返回指向开始的iterato…