准备

image.png
GET.html:

  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>AJAX GET 请求</title>
  8. <style>
  9. #result{
  10. width: 200px;
  11. height: 100px;
  12. border: solid 1px #90b;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <button>点击发送请求</button>
  18. <div id="result"></div>
  19. </body>
  20. </html>

server.js:

  1. //1.引入express
  2. const express = require('express');
  3. //2.创建应用对象
  4. const app =express();
  5. //3.创建路由规则
  6. //request是对请求报文的一个封装
  7. //response是对响应报文的一个封装
  8. app.get('/server',(request, response)=>{
  9. //设置响应头 设置允许跨域
  10. response.setHeader("Access-Control-Allow-Origin","*");
  11. //设置响应体
  12. response.send("Hello AJX");
  13. })
  14. //4.监听端口启动服务
  15. app.listen(8000,()=>{
  16. console.log("服务已经启动,8000端口监听中")
  17. })

基本操作

GET.html

  1. //....
  2. <button>点击发送请求</button>
  3. <div id="result"></div>
  4. <script>
  5. //获取button元素
  6. const btn = document.querySelector("button");
  7. const result = document.querySelector("#result");
  8. //绑定事件
  9. btn.onclick = function(){
  10. //1.创建对象
  11. const xhr = new XMLHttpRequest();
  12. //2.初始化,设置请求方法url
  13. xhr.open('GET',"http://127.0.0.1:8000/server");
  14. //3.发送
  15. xhr.send();
  16. //4.事件绑定 处理服务端返回的结果
  17. //readystate:xhr对象中的属性,表示状态0:未初始化 1:open方法调用完毕 2:send方法调用完毕 3:服务端返回部分结果 4:返回全部结果
  18. //change 改变
  19. xhr.onreadystatechange = function(){
  20. //判断 服务端返回了所有的结果
  21. if(xhr.readyState === 4){
  22. //判断响应状态码 200 404 403 401 500
  23. //2开头都是成功
  24. if(xhr.status >= 200 && xhr.status <300){
  25. //处理结果:行 头 空行 体
  26. //响应行
  27. // console.log(xhr.status);//状态码
  28. // console.log(xhr.responseText);//状态字符串
  29. // console.log(xhr.getAllResponseHeaders());//所有响应头
  30. // console.log(xhr.response);//响应体
  31. //设置result文本
  32. result.innerHTML = xhr.response;
  33. }else{
  34. }
  35. }
  36. }
  37. }
  38. </script>
  39. </body>
  40. </html>

server.js没变

  1. //1.引入express
  2. const express = require('express');
  3. //2.创建应用对象
  4. const app =express();
  5. //3.创建路由规则
  6. //request是对请求报文的一个封装
  7. //response是对响应报文的一个封装
  8. app.get('/server',(request, response)=>{
  9. //设置响应头 设置允许跨域
  10. response.setHeader("Access-Control-Allow-Origin","*");
  11. //设置响应体
  12. response.send("Hello AJAX");
  13. })
  14. //4.监听端口启动服务
  15. app.listen(8000,()=>{
  16. console.log("服务已经启动,8000端口监听中")
  17. })

设置请求参数

xhr.open('GET',"http://127.0.0.1:8000/server?a=100&b=200&c=300");
?与前面隔开,&参数隔开
image.png

发送post请求

POST.html:

  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>AJAX POST请求</title>
  8. <style>
  9. #result{
  10. width: 200px;
  11. height: 100px;
  12. border: solid 1px #90b;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div id="result"></div>
  18. <script>
  19. //获取元素对象
  20. const result = document.getElementById("result");
  21. //绑定事件
  22. result.addEventListener("mouseover",function(){
  23. // console.log("test");
  24. //1.创建对象
  25. const xhr = new XMLHttpRequest();
  26. //2.初始化,设置类型与URL
  27. xhr.open("POST","http://127.0.0.1:8000/server");
  28. //3.发送
  29. xhr.send();
  30. //3.事件绑定
  31. xhr.onreadystatechange = function(){
  32. //判断
  33. if(xhr.readyState === 4){
  34. if(xhr.status >= 200 && xhr.status < 300){
  35. //处理服务端返回的结果
  36. result.innerHTML= xhr.response;
  37. }
  38. }
  39. }
  40. });
  41. </script>
  42. </body>
  43. </html>

server.js新增

  1. app.post('/server',(request, response)=>{
  2. //设置响应头 设置允许跨域
  3. response.setHeader("Access-Control-Allow-Origin","*");
  4. //设置响应体
  5. response.send("Hello AJAX POST");
  6. })

post设置请求体

//3.发送
xhr.send("a=100&b=200&c=300");
image.png

设置请求头信息

  1. //2.初始化,设置类型与URL
  2. xhr.open("POST","http://127.0.0.1:8000/server");
  3. //设置请求头 (预定义的头,里面的值)
  4. xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

如想要自定义,需要在server.js中定义

  1. app.all('/server',(request, response)=>{//*可以接受任意类型的请求
  2. //设置响应头 设置允许跨域
  3. response.setHeader("Access-Control-Allow-Origin","*");
  4. response.setHeader("Access-Control-Allow-Headers","*");//*任意头
  5. //设置响应体
  6. response.send("Hello AJAX POST");
  7. })

服务端响应JSON数据

JSON.html

  1. <script>
  2. const result = document.getElementById("result");
  3. //绑定键盘按下事件
  4. window.onkeydown = function(){
  5. // console.log("test");
  6. //发送请求
  7. const xhr = new XMLHttpRequest();
  8. //设置响应体数据类型
  9. xhr.responseType = 'json';
  10. //初始化
  11. xhr.open('GET','http://127.0.0.1:8000/json-server');
  12. //发送
  13. xhr.send();
  14. //事件绑定
  15. xhr.onreadystatechange = function(){
  16. if(xhr.readyState === 4){
  17. if(xhr.status >= 200 && xhr.status <300){
  18. // //
  19. // console.log(xhr.response);
  20. // result.innerHTML = xhr.response;
  21. //手动对数据转化
  22. // let data = JSON.parse(xhr.response);
  23. // console.log(data);
  24. // result.innerHTML = data.name;
  25. //自动转换--在xhr定义后面设置响应体数据类型
  26. console.log(xhr.response);
  27. result.innerHTML = xhr.response.name;
  28. }
  29. }
  30. }
  31. }
  32. </script>

server.js

  1. app.all('/json-server',(request, response)=>{//*可以接受任意类型的请求
  2. //设置响应头 设置允许跨域
  3. response.setHeader("Access-Control-Allow-Origin","*");
  4. //设置响应头
  5. response.setHeader("Access-Control-Allow-Headers","*");//*任意头
  6. //响应一个数据
  7. const data = {
  8. name: 'dataname',
  9. }
  10. //对对象进行字符串转换,因为send接受参数只能是字符串
  11. let str = JSON.stringify(data)
  12. //设置响应体
  13. response.send(str);
  14. })