10.27 JS学习12

1.Promise对象_Ajax实操

promise不是替代网络请求,只是包裹网络请求,使使用更方便,不再用回调的形式去拿数据。

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>promise_html</title>
</head>

<body>
  <script>
    //XHR对象,页面原生对象,实际应用中不用编写,采用框架或者Ajax即可
    const getJSON = function (url) {
      const promise = new Promise(function (resolve, reject) {
        const handler = function () {
          if (client.readyState !== 4) {//如果状态码不是4,说明请求还没有完成,直接返回
            return;//状态码有0,1,2,3,4,0是未初始化,1是正在发送请求,2是请求已发送,3是正在接收响应,4是响应已接收
          }
          if (this.status === 200) {//如果状态码是200,说明请求成功,400是前端错误,500是后端错误
            resolve(this.response);//成功获取响应结果
          } else {//如果状态码不是200,说明请求失败
            reject(new Error(this.statusText));//返回错误的文本信息
          }
        }
        //做异步操作:异步请求代码
        const client = new XMLHttpRequest();//创建XHR对象实例
        client.open("GET", url);//打开网络请求,GET请求,url为请求地址
        client.onreadystatechange = handler;//绑定状态改变事件,回调函数为handler.接受前后端状态后执行函数handler
        client.responseType = "json";//设置响应数据类型为json
        client.setRequestHeader("Accept", "application/json");//设置请求头,告诉服务器我要的是json格式的数据
        client.send();
      })
      return promise;//返回promise对象实例
    }
    //请求json格式的数据.注意这里没有分号
    getJSON("https://jsonplaceholder.typicode.com/todos/1")//JSON接口
      .then(function (data) {
        console.log(data);//返回网络请求得到的结果
      }, function (error) {
        console.log(error);//返回错误的文本信息
      })

  </script>

</body>

</html>

1.什么是JSON?

2.什么是Ajax?

3.前后端数据接口怎么设置

┌───────────────────┐

│ 前端(浏览器) │

│ HTML / CSS / JS │

└───────┬───────────┘

│ ① 发送请求(Ajax / Fetch)

┌───────────────────┐

│ 后端服务器 │

│ Node.js / Java / │

│ Python / PHP 等 │

└───────┬───────────┘

│ ② 处理请求(解析参数、查询数据库等)

┌───────────────────┐

│ 数据库(DB) │

│ MySQL / MongoDB 等 │

└───────┬───────────┘

│ ③ 返回数据(JSON)

┌───────────────────┐

│ 后端服务器 │

│ 将结果封装成 JSON │

└───────┬───────────┘

│ ④ 响应返回

┌───────────────────┐

│ 前端(浏览器) │

│ 解析 JSON → 渲染页面 │

└───────────────────┘

  1. 什么是 JSON

定义:

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,用于在服务器与客户端之间传输数据。

特点:

* 基于键值对(key-value)的结构;

* 语法简单、可读性强;

* 与语言无关(几乎所有语言都支持解析和生成 JSON)。

示例:

```json

{

"name": "Alice",

"age": 25,

"isStudent": false

}

```

  1. 什么是 Ajax

定义:

Ajax(Asynchronous JavaScript and XML)是一种在不重新加载整个页面的情况下,与服务器进行异步数据交互的技术。

核心原理:

浏览器通过 `XMLHttpRequest` 或 `fetch` 向服务器发送请求 → 服务器返回数据(常用 JSON 格式) → JavaScript 接收并更新页面内容。

示例(使用 fetch):

```javascript

fetch('/api/user')

.then(response => response.json())

.then(data => console.log(data));

```

  1. 前后端数据接口设置

基本流程:

  1. 后端定义接口(API)

* 指定接口路径(如 `/api/user`)

* 定义请求方式(GET、POST、PUT、DELETE)

* 返回标准化 JSON 数据

示例(Node.js / Express):

```javascript

app.get('/api/user', (req, res) => {

res.json({ name: 'Alice', age: 25 });

});

```

  1. 前端调用接口

* 使用 Ajax(`fetch` 或 `axios`)请求后端数据

* 接收 JSON 数据并渲染到页面

示例:

```javascript

fetch('/api/user')

.then(res => res.json())

.then(data => console.log(data));

```

  1. 跨域配置(如前后端分离时)

* 后端需允许跨域请求(CORS)

```javascript

// Node.js 示例

const cors = require('cors');

app.use(cors());

概念 定义 作用
JSON 一种轻量级数据格式 用来传递数据
Ajax 异步请求技术 用来获取数据
接口(API) 前后端数据交互的通道 定义数据怎么传
  • XHR 是 送外卖的小哥(他真的去跑任务)。

  • Promise 是 外卖平台的订单系统(你可以在上面等结果)。

  • .then()"外卖到了通知我" 这个功能。

所以说,Ajax是一种异步处理的技术,可以像后端服务器请求,在不刷新整个界面的情况下处理数据,本质通过XHR或者fetch进行请求,但是使用promise可以进行封装,更加便捷,用.then函数接收请求的结果。

问题 答案
1️⃣ 用的是 XHR 还是 Promise? 两个都用:XHR 负责发请求,Promise 包装它的结果
2️⃣ .then() 前边要加什么? .then() 必须接在 Promise 对象后面,比如 getJSON() 的返回值
3️⃣ 为什么不用再 new Promise() 因为在函数 getJSON() 里已经 new 过了,你只要用 .then() 就行
步骤 发生了什么 属于谁
① 创建请求 XMLHttpRequest 发送请求 XHR
② 创建 Promise 包装异步操作结果 Promise
③ 请求返回 调用 resolve()reject() XHR 内部逻辑
.then() 执行 处理成功结果 Promise 链

上面这个是网络请求,用到了promise和XHR,上一节的图片加载使用的是浏览器自身的·Image()函数和promise,没有用到XHR。异步的核心是 img.onload / img.onerror
而不是 xhr.onreadystatechange。

示例 内部异步操作 用的对象 是否用 XHR .then() 作用
getJSON() 请求 JSON 数据 XMLHttpRequest ✅ 是 获取接口数据
loadImageAsync() 加载图片资源 Image() ❌ 否 获取图片对象
相关推荐
好大哥呀12 小时前
Java Web的学习路径
java·前端·学习
cos13 小时前
Fork 主题如何更新?基于 Ink 构建主题更新 CLI 工具
前端·javascript·git
odoo中国13 小时前
Odoo 19 模块结构概述
开发语言·python·module·odoo·核心组件·py文件按
代码N年归来仍是新手村成员13 小时前
【Java转Go】即时通信系统代码分析(一)基础Server 构建
java·开发语言·golang
Z1Jxxx14 小时前
01序列01序列
开发语言·c++·算法
摸鱼的春哥14 小时前
AI编排实战:用 n8n + DeepSeek + Groq 打造全自动视频洗稿流水线
前端·javascript·后端
沐知全栈开发14 小时前
C语言中的强制类型转换
开发语言
梦雨羊14 小时前
Base-NLP学习
人工智能·学习·自然语言处理
丝斯201114 小时前
AI学习笔记整理(42)——NLP之大规模预训练模型Transformer
人工智能·笔记·学习
关于不上作者榜就原神启动那件事14 小时前
Java中大量数据Excel导入导出的实现方案
java·开发语言·excel