xmlhttprequest写文件_jsonserver + XMLHttpRequest—数据通信初体验

8d5d8e503829104822c9c5bdf3627f63.png

点击上方蓝字关注我们

文章大概需要阅读 10分钟哦\(^o^)/~

6a72eb38d8464cbf54f774047ae92d02.png
在这里插入图片描述

准备工作

工具:

  • VS Code
  • Postman

初始化:先创建一个文件page

1、json-server

1.1 json-server介绍

一个在前端本地运行,可以存储json数据的server:可以模拟请求以及请求回来的过程

1.2 使用

1、在page目录下使用npm init -y初始化项目 此时在page目录下会生成69de377639a0ab175b1d574c812fe7cb.png

2、继续使用npm i json-server安装 json-server此时page目录变成:8c986514234d1b00c5887b8a7c85f48f.png

3、在page文件下新创建一个db.json文件,用来存放我们需要的数据 再将db.json里面的数据改成你自己的:

{
  "users": [
    {
      "name": "jinda1",
      "id": 1
    },
    {
      "name": "jinda2",
      "id": 2
    },
    {
      "name": "jinda3",
      "id": 3
    }
  ]
}

那么我们需要思考的就是,如何启动json-server,去完全模拟请求以及请求回来的过程

① 来到packet.json里面:修改掉"scripts"的值:作用是创建一条命令行,去启动db.json 成后台数据源

 "scripts": {
   "server:json":"json-server --watch db.json"
  },
 //或者自己选择端口
  "scripts": {
   "server:json":"json-server --watch --port 1234 db.json"

② 接着我们运行:npm run server:jsonb875d8286adac045308023fe0eec78f6.png此时你已经成功启动了json-server

4900387ac8527c6a3a5dc4656e2f042b.png
在这里插入图片描述

就当是后端已经准备就绪了,接着来看看前端如何请求我们创建的这个后端数据

2、使用postman添加数据

首先要清楚的是

  • 在网页端 浏览器使用http和服务器端请求进行数据读取的方式是 GET 获取http://localhost:3000/users 的数据   它会得到一个数组users[]
  • 一个 POST 请求通常是通过 HTML 表单发送, 并返回服务器的修改结果 这时候我们可以使用到最前面说到的postman工具,通过http://localhost:3000/users 这个接口来进行对db.json数据的添加879f31ade6fa972acc23e8fed7d972f4.png在body界面添加key和 value的值:b244dff68ee6ec4652f026c494c68ef9.pngsend完之后就可以回到db.json中查看数据是否添加成功:a857c9f01426d950aeafa32ade3d3c26.png

3、XMLHttpRequest 请求数据

3.1XMLHttpRequest介绍

XMLHttpRequest(XHR)对象用于与服务器交互。通过 XMLHttpRequest 可以在不刷新页面的情况下请求特定 URL,获取数据。这允许网页在不影响用户操作的情况下,更新页面的局部内容。

3.1.1 XMLHttpRequest()构造函数

XMLHttpRequest()该构造函数用于初始化一个 XMLHttpRequest实例对象。在这个对象上有在调用下列任何其他方法之前,必须先调用该构造函数,或通过其他方式,得到一个实例对象

首先了解一下我们待会要用的一些方法:

  • XMLHttpRequest.onreadystatechange当 readyState 属性发生变化时
  • XMLHttpRequest.readyState只读 返回 一个无符号短整型(unsigned short)数字,代表请求的状态码

有以下几个状态:

0:尚未初始化 对应 XMLHttpRequest.UNSENT

1:正在加载 对应 XMLHttpRequest.OPENED

2:加载完毕 对应 XMLHttpRequest.HEADERS_RECEIVED

3:正在处理  对应 XMLHttpRequest.LOADING

4:处理完毕  对应 XMLHttpRequest.DONE

  • XMLHttpRequest.responseText只读 返回一个 DOMString,该 DOMString 包含对请求的响应,如果请求未成功或尚未发送,则返回 null。

3.2具体使用

3.2.1 get方法用于获取数据

在page目录下新建一个index.html文件,它的作用就是用来获取users数据,显示在页面上 步骤如下:

  • 创建一个id属性为users的div标签

  • 使用document.getElementById取得这个元素赋值给oUsers,并将之后获取的数据添加到它的内容上

  • 通过httpRequest = new XMLHttpRequest();创建一个XMLHttpRequest()实例。

  • readyState属性发生变化时,调用方法 httpRequest.onreadystatechange

  • httpRequest.readyState == XMLHttpRequest.DONE 对应处理完毕

  • 来到前端 获取数据

 let users = JSON.parse(httpRequest.responseText);
  • 将获取的数据添加到oUsers,
oUsers.innerHTML = users.map( user =>  
${user.id} - ${user.name}`).join('')
  • httpRequest.open("GET","http://localhost:3000/users",true);初始化 HTTP 请求参数

  • httpRequest.send();发出 HTTP 请求

完整代码:

<body>
  <div id="users">div>
  <script>
    const oUsers = document.getElementById('users');
    let httpRequest;
    if(window.XMLHttpRequest) {user>
      httpRequest = new XMLHttpRequest();//数据请求实例 xhr
    } else if(window.ActiveXObject) {
      httpRequest = new ActiveXObject('XMLHTTP');
    }
    httpRequest.onreadystatechange = function () {
      if(httpRequest.readyState == XMLHttpRequest.DONE) {
        let users = JSON.parse(httpRequest.responseText);
        oUsers.innerHTML = users.map( user => `<li>${user.id} - ${user.name}<li>
        `).join('')
      }
    }
    httpRequest.open("GET","http://localhost:3000/users",true); 
    httpRequest.send();script>
body>

在前端http://127.0.0.1:8080/  可以看到请求来的数据并显示在页面上:

f20609dcd71a14d17a0ab1c8ae76ee24.png147279447764ecdb23e61e6e354bf971.png

当然你也可以在Network里看到请求的地址就是我们原先写好的"http://localhost:3000/users"11bf66db38db5c74ee7bc3a90ad9a8fe.png

3.2.2 post方法:发送数据给服务器.

在page目录下新建add.html文件:

在上面例子上多了一个方法:XMLHttpRequest.setRequestHeader()设置 HTTP 请求头的值。需要注意的是:必须在 open() 之后、send() 之前调用 setRequestHeader() 方法

<body>
  <script>const xhr = new XMLHttpRequest();let name = 'post';
  xhr.onreadystatechange = function() {if (xhr.readyState === XMLHttpRequest.DONE) {console.log('保存成功')
    }
  }
  xhr.open('POST', 'http://localhost:3000/users'); // 建立一个链接// 设置请求头
  xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xhr.send('name=' + encodeURIComponent(name));script>
body>

运行这段代码,在db.jsonhttp://localhost:3000/users以及http://127.0.0.1:8080/都会添加name = ‘post’d502d3b28a8df853bffc677e6b6ba4d3.png4d4433f8e21442ef65501ec7b86347bb.png1d6277c5d3af382c8079a9b970d24ede.png

因此我们达到了通过post方法发送数据给服务器,并且结合前边的后端数据,我们通过访问db.json文件拿到了数据,并显示在页面上

总结

综上,可以看到json-serverXMLHttpRequest合作,可以实现数据的通信,无论是从浏览器(前端)通过get方式发出数据请求,还是通过post方法将数据发送给服务器并显示在页面上,都可以实现。而XMLHttpRequest带来前端主动请求数据的能力,使得前端页面变得更加丰富,更具动态性。

3081c2b08ae8e696960c22bc6a03977d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值