原生AJAX的学习

这篇具有很好参考价值的文章主要介绍了原生AJAX的学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基础知识

  知识点梳理见图:

原生AJAX的学习

自己动手实践案例

案例1: 访问本地文件

<!DOCTYPE html>
<html>
<body>

<div id="demo">
<h1>XMLHttpRequest 对象</h1>
<button type="button" onclick="loadDoc()">更改内容</button>
</div>

<script>
function loadDoc() {

  const myHttp = new XMLHttpRequest();

  myHttp.onload = function () {
    //响应
    document.getElementById("demo").innerHTML = this.responseText
  };
    //这里是访问跟文件同一层级下的文件夹下的某个文件
  myHttp.open("GET", "./demo/aa.txt",true);

  myHttp.send();
}
</script>

</body>
</html>

文件的位置:

原生AJAX的学习

  • 代码效果如下:

原生AJAX的学习

 文章来源地址https://www.toymoban.com/news/detail-475736.html

  •  如果本地测试报错的话,可以看这篇文章: 原生AJAX案例浏览器报错:Cross origin requests are only supported for protocol 

 

案例2:访问服务端数据

<!DOCTYPE html>
<html>
<body>

<div id="demo">
<h1>XMLHttpRequest 对象</h1>
<button type="button" onclick="loadDoc()">更改内容</button>
</div>

<script>
function loadDoc() {

  const myHttp = new XMLHttpRequest();
  
  myHttp.onload = function () {
    //响应
    document.getElementById("demo").innerHTML = this.responseText
  };
  console.log(myHttp.getAllResponseHeaders())
  //定义method url 
  myHttp.open("GET", "http://123.207.32.31:5000/test",true);
  
  //设置请求头 - 请求头的设置要在open之后,此处 是设置token,必须是 key-val 形式
  myHttp.setRequestHeader(
    "Authorization","eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwibmFtZSI6ImNvZGVyd2h5Iiwicm9sZSI6eyJpZCI6MSwibmFtZSI6Iui2hee6p-euoeeQhuWRmCJ9LCJpYXQiOjE2ODYyMDgxMzMsImV4cCI6MTY4ODgwMDEzM30.Ve6T7h4dGuYmk4Lwch1rlr2pvf11XKfr2F2mxl1kAgp46rvgFxjmUqjhRmq90whydPVYTtrvPnWp1aGY50eVtQcY1olqqwr8ZOngERHIyHgzQxY3zEDLrtcZ5nrNqGeAIutc6kDOgGQFPyOvFOnKKMH7Puwgjydv41XGpEEqNus"
  )
  //定义传输数据
  let str = {
    "name": "dingding",
    "password": "4569841"
  }
  //传递参数
  myHttp.send(JSON.stringify(str));
}
</script>

</body>
</html>
  • 代码效果如下:

原生AJAX的学习

案例3:自己尝试封装一个AJAX

let createAjax = function () {
  let xhr = null;
  try {
    //IE系列浏览器
    xhr = new ActiveXObject("microsoft.xmlhttp");
  } catch (e1) {
    try {
      //非IE浏览器
      xhr = new XMLHttpRequest();
    } catch (e2) {
      window.alert("您的浏览器不支持ajax,请更换!");
    }
  }
  return xhr;
};

const ajax = function (config) {
  debugger;
  let type = config.type;
  let dataType = config.dataType;

  const url = config.url;
  const data = config.data;
  const successFn = config.success;
  const errFn = config.err;
  const headers = config.headers;

  if (type === null) {
    //默认类型为get
    type = "get";
  }
  if (dataType === null) {
    dataType = "text";
  }

  //创建XHR对象
  const myXHR = createAjax();

  myXHR.open(type, url, true);

  //设置header
  if (headers !== null) {
    for (header in headers) {
      console.log(header);
      myXHR.setRequestHeader(header);
    }
  }

  //类型
  if (type.toLowerCase() == "get") {
    myXHR.send(null);
  } else if (type.toLowerCase() === "post") {
    // myXHR.setRequestHeader("content-type", "application/x-www-form-urlencoded");
    myXHR.setRequestHeader("content-type", "application/json");
    myXHR.send(data);
  }

  //返回数据
  myXHR.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      if (dataType.toLowerCase() === "text") {
        if (successFn !== null) {
          return successFn(this.responseText);
        }
      }
      if (dataType.toLowerCase() === "xml") {
        if (successFn !== null) {
          return successFn(this.responseXML);
        }
      }
      if (dataType.toLowerCase() === "json") {
        if (successFn !== null) {
          return successFn(eval("(" + this.responseText + ")"));
        }
      }
    } else {
      return errFn(this.status);
    }
  };
};
<!DOCTYPE html>
<html>
  <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
   
  </head>
  <body>
    <div>
      <h1 id="demo">XMLHttpRequest 对象</h1>
      <button type="button" onclick="loadDoc()">更改内容</button>
    </div>
    <script  src="./03_ajax简单封装.js"></script>
     <script>
      function loadDoc() {
        ajax({
          type: "post",
          url: "http://123.207.32.xxx:5000/login",
          heasders: {
            Authorization:"123456123"
          },
          data:JSON.stringify({
            "name":'zooey',
            "password":"123456"
          }),
          dataType:'json',
          success:function(res){
            const el = document.querySelector("#demo")
            el.innerHTML = res.data.id
          },
          err:function(err){
            let el = document.querySelector("#demo")
            el.innerHTML = err
          }
        });
      }
    </script>
  </body>
</html>

效果如下:

原生AJAX的学习

 

原生AJAX的学习

 

到了这里,关于原生AJAX的学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 基础知识点

    Object 类相关方法   getClass 获取当前运行时对象的 Class 对象。 hashCode 返回对象的 hash 码。 clone 拷贝当前对象, 必须实现 Cloneable 接口。浅拷贝对基本类型进行值拷贝,对引用类型拷贝引用;深拷贝对基本类型进行值拷贝,对引用类型对象不但拷贝对象的引用还拷贝对象的相

    2024年02月13日
    浏览(64)
  • FPGA基础知识点

    基础知识 逻辑值 逻辑0:表示低电平,也就是对应电路GND 逻辑1:表示高电平,也就是对应电路VCC 逻辑X:表示未知,有可能是高电平也有可能是低电平 逻辑Z:表示高阻态,外部没有激励信号,是一个悬空状态 数字进制格式 Verilog数字进制格式包括 二进制(b) , 八进制(

    2024年02月03日
    浏览(53)
  • 硬件基础知识点

    D:十进制 B:二进制 H:十六进制 二进制→十六进制 整数部分从右往左,小数部分从左往右。 四个二进制数看作一个十六进制数,不足的补零。 十六进制→二进制同理。 十进制→二进制 方法一:短除法 除二倒取整,乘二正取余 方法二:拆分法(二进制减法) 十进制数转

    2024年02月06日
    浏览(52)
  • CSS基础知识点

    目录 ​编辑一、基本语法规范 二、CSS 选择器 1、简单选择器  (1)标签选择器 (2)类选择器 (3)ID 选择器 2、复合选择器 (1)后代选择器 (2)子选择器 (3)并集选择器 三、CSS常用属性值 1、设置字体家族 2、设置字体大小 3、设置字体的粗细 4、文字倾斜设置 5、文字

    2024年02月11日
    浏览(61)
  • 【C++】如果你准备学习C++,并且有C语言的基础,我希望你能简单的过一遍知识点。

    相关视频——黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili(1-83) 我的小站——半生瓜のblog 我知道这个视频早已经被很多人学习并且记录笔记,但是我还是想再过一遍前面的基础知识点,所以我这个笔记会非常的简洁,适合有C语言基础的小伙

    2024年02月01日
    浏览(51)
  • OSPF基础知识点2

    目录 OSPF的三张表: 邻居和邻接关系: OSPF邻居关系的建立过程: 邻接关系建立的详细过程: 指邻居: OSPF支持的网络类型:  OSPF路由器类型: OSPF有三张重要的表项,OSPF邻居表、LSDB表和OSPF路由表。 对于OSPF的邻居表,需要了解: 1.OSPF在传递链路状态信息之前,需先建立

    2024年02月09日
    浏览(41)
  • Pytorch基础知识点复习

    本篇博客是本人对pytorch使用的查漏补缺,参考资料来自 深入浅出PyTorch,本文主要以提问的方式对知识点进行回顾,小伙伴们不记得的知识点可以查一下前面的教程哦。   现在并行计算的策略是 不同的数据分布到不同的设备中,执行相同的任务(Data parallelism) 。   它的逻

    2024年01月20日
    浏览(42)
  • 多线程基础知识点梳理

    进程(process):进程是计算机中的一个任务,比如打开浏览器、IntelliJ IDEA。 线程(thread):线程是进程内部的子任务。比如IDEA在敲代码的同时还能自动保存、自动导包,都是子线程做的。 进程和线程的关系就是一个进程包含一个或多个线程。 线程是操作系统调度的最小任

    2024年02月04日
    浏览(56)
  • Python爬虫基础知识点

    Python爬虫是使用Python编写的程序,可以自动抓取互联网上的数据。常用的Python爬虫框架包括Scrapy、BeautifulSoup、Requests等。Python爬虫可以应用于众多场合,如大数据分析、信息监测、数据挖掘和机器学习等领域。那么新手应该如何学习python爬虫呢? 以下是Python爬虫的基础知识:

    2024年02月08日
    浏览(55)
  • Linux基础知识点2

    Linux基础知识 适合有Linux基础的人群进行复习。 禁止转载! 文件管理与常用命令 Linux的文件的组成部分:        文件名 、 inode (i节点)和 block (真正存数据的区域)。 查看某个文件的属性:            ls -lh     #可看到有类似”-rw-r--r--”的属性符号           第

    2024年02月09日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包