67 # 对象的处理

简介: 67 # 对象的处理

上一节学习了 form 数据的处理,这一节学习 Ajax 的方式提交数据

服务端的代码如下

const http = require("http");
const url = require("url");
const querystring = require("querystring");
let server = http.createServer();
server.on("request", (req, res) => {
    let { pathname } = url.parse(req.url);
    // 1)配置跨域
    // 配置跨域头允许任何网站访问
    res.setHeader("Access-Control-Allow-Origin", "*");
    // 允许携带header
    res.setHeader("Access-Control-Allow-Headers", "Content-Type,Authorization");
    // 默认支持 get 和 post
    res.setHeader("Access-Control-Allow-Methods", "GET,POST");
    // 遇到 OPTIONS 预检请求,直接成功即可
    if (req.method === "OPTIONS") {
        res.statusCode = "200";
        res.end();
    }
    // 2)解析请求体
    const arr = [];
    req.on("data", (chunk) => {
        arr.push(chunk);
    });
    req.on("end", () => {
        let result = Buffer.concat(arr).toString();
        console.log("result---->", result);
        let obj;
        if (req.headers["content-type"] === "application/x-www-form-urlencoded") {
            obj = querystring.parse(result, "&", "=");
        } else if (req.headers["content-type"] === "application/json") {
            obj = JSON.parse(result);
        }
        console.log("obj---->", obj);
        // 3)根据不同路径返回对应内容
        if (pathname === "/login" && req.method == "POST") {
            res.setHeader("Content-Type", "application/json");
            res.end("登录成功");
        }
        if (pathname === "/regist" && req.method == "POST") {
            res.setHeader("Content-Type", "application/json");
            res.end(JSON.stringify(obj));
        }
    });
});
server.listen(3000);

页面请求逻辑如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>凯小默测试对象的处理</title>
</head>
<body>
    <form action="http://localhost:3000/login" method="POST" enctype="application/x-www-form-urlencoded">
        <input type="text" name="username" />
        <input type="text" name="password" />
        <button type="submit">提交</button>
    </form>
    <hr />
    <button id="btn">注册提交数据</button>
    <script>
        // 默认如果域名,端口号,协议不一致会有跨域问题
        btn.addEventListener("click", () => {
            // ajax 4部曲 1.创建 xhr 对象 2.开启请求 3.发送请求 4.监听状态变化
            const xhr = new XMLHttpRequest();
            xhr.open("POST", "http://localhost:3000/regist", true); // 异步提交
            xhr.setRequestHeader("Content-Type", "application/json");
            // 浏览器自动将相应的结果转化为对象
            xhr.responseType = "json";
            xhr.send(
                JSON.stringify({
                    name: "kaimo",
                    age: 313
                })
            );
            // xhr.readyState == 4 && xhr.status == 200
            xhr.onload = function () {
                console.log(xhr.response);
            };
        });
    </script>
</body>
</html>

启动服务,点击提交就能看到请求成功,也可以自己去掉跨域头试试

nodemon "67 # 对象的处理.js"

目录
相关文章
|
1月前
|
JSON 程序员 C#
使用 C# 比较两个对象是否相等的7个方法总结
比较对象是编程中的一项基本技能,在实际业务中经常碰到,比如在ERP系统中,企业的信息非常重要,每一次更新,都需要比较记录更新前后企业的信息,直接比较通常只能告诉我们它们是否指向同一个内存地址,那我们应该怎么办呢?分享 7 个方法给你!
|
7月前
|
C++
C++中的对象
C++中的对象
58 2
|
7月前
|
测试技术 索引
v-for 与对象
v-for 与对象
|
存储 程序员 编译器
C++都有对象了,你还没有吗?
C++都有对象了,你还没有吗?
89 0
|
Java 开发者 容器
你有对象吗?
你有对象吗?
123 0
|
存储 JSON Java
谈“对象“
谈“对象“
|
存储 编译器 C语言
我现在必须new一个对象!!!
C++内存管理,手动开辟空间,我现在必须new一个对象!!!
94 0
我现在必须new一个对象!!!
|
算法 Java
对象的比较
本篇文章是对Java中一些常见的比较的总结,在涉及到比较方面,有元素的比较与对象的比较,下边博主来带领大家一起了解这些比较方式。
114 0