MarginLon MarginLon
首页
  • Web

    • Web基础
    • Web布局
    • CodeSnippet
  • Vue

    • Vue
  • React

    • React
  • Node.js

    • Node.js
  • 技术文档
  • UI组件库
  • 动画库
  • 图形库
  • 桌面端
  • 学习笔记
  • 生活笔记
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

MarginLon

http://info.cern.ch
首页
  • Web

    • Web基础
    • Web布局
    • CodeSnippet
  • Vue

    • Vue
  • React

    • React
  • Node.js

    • Node.js
  • 技术文档
  • UI组件库
  • 动画库
  • 图形库
  • 桌面端
  • 学习笔记
  • 生活笔记
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 数据类型 类型检测 类型转换
  • 精度问题
  • 堆栈内存 函数底层运行机制 块级作用域
  • GC机制 闭包作用域 let/const/var
  • 闭包应用
  • DOM
  • BOM
  • This指向
  • 浏览器渲染机制 CRP优化 事件循环机制
  • 函数防抖节流
  • 模块化 柯里化
  • 构造函数 原型
  • CLASS
  • 工厂设计模式 深浅拷贝 深浅合并
  • Iterator/Generator
  • Promise/ Async/ Await
  • HTTP/跨域
  • API
  • AJAX
    • 1. AJAX
  • 事件
  • 《JavaScript高级程序设计(第4版)》
MarginLon
2022-05-14
目录

AJAX

  • 1. AJAX

# 1. AJAX

  • AJAX解决网页异步刷新
    • 同步刷新
    • 异步刷新 1. 浏览器可以从服务器同时请求多项内容; 2. 浏览器请求返回的速度会快得多; 3. 只有页面中真正改变的部分得到更新; 4. 能够减少服务器数据流量; 5. 用户可以在页面更新的同时继续工作; 6. 有些改变无须与服务器往返通信就可以处理。
// AJAX :基于XMLHttpRequest创建HTTP请求
//      + 创建xml实例
//      + open 打开一个url地址 [ 发送请求前的配置]
//          + method 请求方式:GET(get/delete/head/options...)/POST(post/put/patch...)
//          + url 请求的URL地址
//          + async 是否异步(默认true)
//          + username userpass ...
//      + onreadystatechange 监听请求过程,不同阶段不同处理
//      + send 发送请求,[设置请求的主体信息]
let xhr = new XMLHttpRequest; // ie6 7 8 : ActiveXObject
xhr.open('GET','./1.json',true);
xhr.setRequestHeader('Content-Type','multipart/form-data');
xhr.onreadystatechange = function () {
    if(xhr.readyState === 4 && xhr.status === 200){
        console.log(xhr.rensponseText);
    }
};
xhr.send(Qs.stringify({
    lx:0,
    name:xxx
}));

    /*
            GET和POST
            -   GET请求传递给服务器的信息,除了请求头传递外,要求基于URL问号传参传递给服务器
                xhr.open('GET','./1.json?lx=1&name=xxx');
            -   POST则基于请求主体传递
                xhr.send('lx=1&name=xxx')
            1)GET传递的信息不如POST多,因为URL有长度限制,超出会被截掉,POST理论上无限制,但传递过多会传输超时...可以手动限制
            2)GET会产生缓存(浏览器默认产生,不可控):两次及以上,请求相同的API接口,并且传递参数一样,浏览器可能会把第一次请求的信息直接返回,而非从服务器获取最新信息。请求URL的末尾设置随机数,以此清除GET缓存
                xhr.open('GET','./1.json?lx=1&name=xxx'+Math.random());
            3)POST相对安全: GET传递的信息基于URL末尾拼接,劫持或修改.
    */

    /*    - AJAX状态 
            - xhr.readyState  
            1. UNSENT 未发送,默认  [0]
            2. OPENED 已打开 执行了OPEN [1]
            3. HEADERS_RECEIVED: 服务器已经返回响应头的信息 [2]
                - 响应头:Date 返回时的服务器时间 先返回后主体慢慢返回 
                - 响应主体:客户端需要的信息
            4. LOADING 主体正在加载返回 [3]
            5. DONE 主体信息返回 [4]
          - HTTP网络状态码 
            - xhr.status
            - 以2开始 200 服务正常返回数据(数据是否为想要的不一定 业务流程:code标识表示业务逻辑上的成功失败)
            - 以3开始 304 读取的是协商缓存的数据 301永久重定向(一般用于域名的转移) 302/307 临时转移/重定向(一般用于服务器的负载均衡)
            - 以4开始 400 请求参数有误 401 无权访问 404 地址错误 403 服务器拒绝执行 [一般都是客户端问题]
            - 以5开头 500 服务器发生未知错误 503 超负荷 [一般是服务器问题]
          - 获取响应主体信息 xhr.response/responseText/responseXML...
            JSON字符串 XML格式 文件流[binary]
          - 获取响应头信息 xhr.getResponseHeader/getAllResponseHeaders
    */

//      + send 发送请求,[设置请求的主体信息]
//          基于请求主体传递给服务器的数据格式有要求 [postman:接口测试工具]
//          1.form-data 文件上传
//          xhr.setRequestHeader('Content-Type','multipart/form-data');
//          --- 
//          fd.append('lx',0);
//          fd.append('name','xxx');
//          xhr.send(fd);
//          2.x-www-form-url-encoded格式字符串 
//          格式;"lx=1&name=xxx" [常用]
//          $ npm i qs
            /*
            xhr.setRequestHeader('Content-Type','application/x-www-form-url-encoded');
            ---
            xhr.send(Qs.stringify({
            lx:0,
            name:xxx
             }));
            */
//          3.raw 字符串
//          普通字符串 => text/plain
//          JSON => application/json    => JSON.stringify/parse [常用]
//          XML格式字符串 => application/xml
//          4.binary
//          buffer/二进制
//          xhr.setRequestHeader('Content-Type','image/jpeg');
//          5.GraphQL

// xhr.abort() 中断,onabort
// xhr.timeout 设置超时时间 ontimeout
// xhr.withCredentials CORS跨域允许携带cookies等
// xhr.upload.onprogress 监听文件上传进度
// xhr 7-function
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
编辑 (opens new window)
上次更新: 2023/04/01, 15:26:22
API
事件

← API 事件→

最近更新
01
KnockoutJS
11-12
02
综述
10-17
03
前言
10-12
更多文章>
Theme by Vdoing | Copyright © 2019-2024 MarginLon | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式