ajax之post请求(原生)

885 阅读2分钟

POST请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <textarea name="" id="t1" cols="30" rows="10">
​
    </textarea>
    <script>
        //获取标签信息
        const text = document.getElementById('t1');
        //给标签绑定事件 鼠标移动到指定物体事件  悬浮事件
        text.addEventListener('mouseover',()=>{
            // console.log("执行了悬浮事件")
            /**创建请求对象,初始化请求类型和ip,
             * 判断事件执行状态,
             * 只有当status >= 200 && status <300 为成功后将请求的response赋值给html
            */
           const xhr = new XMLHttpRequest();
           xhr.open("POST",'http:/192.168.0.102:8001/server');
           xhr.send();
           xhr.onreadystatechange = ()=>{
               if(xhr.readyState == 4){
                if(xhr.status >= 200 && xhr.status < 300){
                    console.log(xhr.response)
                    text.innerHTML = xhr.response;
                }
               }
           }
        })
    </script>
</body>
<style>
    #t1{
        width: 200px;
        height: 200px;
        border: #68e91e solid 2px;
    }
</style>
</html>
//引用express模块
const express = require('express');
//实例化对象
const app = express();
//get规划路由
app.get('/server',(resquset,response)=>{
    //设置响应头,允许跨域
    response.setHeader('Access-Control-Allow-Origin','*')
    //设置响应体
    response.send('hello Ajax')
})
//post规划路由  
app.post('/server',(resquset,response)=>{
    //设置响应头,允许跨域
    response.setHeader('Access-Control-Allow-Origin','*')
    //设置响应体
    response.send('hello Ajax post')
})
//监听服务启动
app.listen(8001,()=>{
    console.log('post请求准备完毕')
})
​
//回顾点:每个请求方法的不同,要规划不同请求方试的路由

POST请求携带参数的方试

post请求携带参数,是在发送请求的时候携带的

const xhr = new XMLHttpRequest();
xhr.open("POST",'http:/192.168.0.102:8001/server');
let params = 'a=300&b=200&c=100'
xhr.send(params);//post请求携带参数,是在发送请求的时候携带的
xhr.onreadystatechange = ()=>{
    if(xhr.readyState == 4){
        if(xhr.status >= 200 && xhr.status < 300){
        console.log(xhr.response)
        text.innerHTML = xhr.response;
        }
    }
}

image-20220329235050406.png

设置请求头

设置请求头一般传递用户身份识别信息

 const xhr = new XMLHttpRequest();
 xhr.open("POST",'http:/192.168.0.102:8001/server');
 //设置请求头信息 使用setRequestHeader 需要在open之后,send之前使用中,其中的参数键值对,第一个为键。第二个为值
 xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
 xhr.setRequestHeader('name','asen')//可以设置自定义请求头,但是需要后台设置允许自定义请求头
 let params = 'a=300&b=200&c=100'
 xhr.send(params);//post请求携带参数,是在发送请求的时候携带的
 xhr.onreadystatechange = ()=>{
     if(xhr.readyState == 4){
         if(xhr.status >= 200 && xhr.status < 300){
             console.log(xhr.response)
             text.innerHTML = xhr.response;
         }
     }
 }
//post规划路由  
// app.post('/server',(resquset,response)=>{
//     // console.log(response)
//     response.setHeader('Access-Control-Allow-Header','*')
//     //设置响应头,允许跨域
//     response.setHeader('Access-Control-Allow-Origin','*')
//     //设置响应体
//     response.send('hello Ajax post')
// })
//接受所有请求 如果设置自定义请求头需要在all事件接收
app.all('/server',(resquset,response)=>{
    // console.log(response)
    //设置允许自定义请求头
    // response.setHeader('Access-Control-Allow-Headers','*')
    //设置响应头,允许跨域
    response.setHeader('Access-Control-Allow-Origin','*')
    //设置响应体
    response.send('hello Ajax all')
})

6.服务器传递JSON数据

 const result = document.getElementById('result')
 //监听键盘按下事件
 window.onkeydown = function(){
     let xhr = new XMLHttpRequest();
     xhr.responseType = "json"
     xhr.open('get','http://192.168.141.51:8002/json-server')
     xhr.send();
     xhr.onreadystatechange = ()=>{
             if(xhr.readyState == 4){
             if(xhr.status >= 200 && xhr.status < 300){
             //手动 将服务器请求的json数据转为数据
             // let obj = JSON.parse(xhr.response)
             // result.innerHTML = obj.name
             //自动转化 只需要xhr.responseTpye = "json"
             console.log(xhr.response)
             result.innerHTML = xhr.response.name
             }
         }
     }
 }
//引用express模块
const express = require('express');
//实例化对象
const app = express();
//规划路由
//接受所有请求 如果设置自定义请求头需要在all事件接收
app.all('/json-server',(resquset,response)=>{
    // console.log(response)
    //设置允许自定义请求头
    // response.setHeader('Access-Control-Allow-Headers','*')
    //设置响应头,允许跨域
    response.setHeader('Access-Control-Allow-Origin','*')
    //设置响应体
    //设置传送数据 手动数据转json
    let obj = {
        name : 'asen',
        age: '18',
    }
    obj = JSON.stringify(obj)
    //send方法中只能传输 字符串 和 buffer(0,1组成的数据)
    response.send(obj)
})
//监听服务启动
app.listen(8002,()=>{
    console.log('json请求准备完毕')
})

7.安装nodemon监听服务器(server)自动重启

需要监听哪个文件就去哪个文件下面输入nodemon "文件名"

问题:系统禁止运行脚本。

解决方案

1.输入nodemon.cmd "运行文件夹名字"

2.按下组合键Windows + R以打开运行窗口。输入powershell然后按下回车键。

输入Start-Process powershell -Verb runAs,会打开管理员窗口

在管理员窗口输入set-ExecutionPolicy RemoteSigned 回复输入Y即可

image-20220406220051426.png