web前端面试高频考点——JavaScript-Web-API 篇(二)AJAX、存储

简介: web前端面试高频考点——JavaScript-Web-API 篇(二)AJAX、存储

JS-Web-API-Ajax

一、ajax 的核心API - XMLHttpRequest

1、原生 AJAX 发送 GET 请求

xhr.readyState 不同值的不同意思:


0 - UNSET 尚未调用 open 方法

1 - OPENED open 方法已被调用

2 - HEADERS_RECEIVED send 方法已被调用,header 已被接收

3 - LOADING 下载中,responseText 已有部分内容

4 - DONE 下载完成

xhr.status 不同值的不同意思:

  • 2xx - 表示成功处理请求,如 200
  • 3xx - 需要重定向,浏览器直接跳转,如 301(永久重定向) 302(临时重定向) 304(资源未改变)
  • 4xx - 客户端请求错误,如 404 403
  • 5xx - 服务端错误
  // test.json
  { "name": "zhangsan"}
    const xhr = new XMLHttpRequest()
    xhr.open('GET', './test.json', true) // true 表示异步
    xhr.onreadystatechange = function () {
        if(xhr.readyState === 4) {
            if(xhr.status === 200) {
                console.log(JSON.parse(xhr.responseText))
            } else {
                console.log('其他情况')
            }
        } 
    }
    xhr.send(null)

a6257d18988941d9ab7728684c7d65ce.png

2、原生 AJAX 发送 POST 请求

示例:登录的请求,注意:需要传参

    const xhr = new XMLHttpRequest()
    xhr.open('POST', '/login', true)
    xhr.onreadystatechange = function () {
        if(xhr.readyState === 4) {
            if(xhr.status === 200) {
                console.log(JSON.parse(xhr.responseText))
            }
        } else {
            console.log('其他情况')
        }
    }
    const postData = {
        username: 'zhangsan',
        password: 'xxx'
    }
    xhr.send(JSON.stringify(postData))

二、浏览器的同源策略

1、同源策略

  • ajax 请求时,浏览器要求当前网页和 server 必须同源(安全)
  • 同源:协议、域名、端口,三者必须一致
  • 不同源 => 前端:http://a.com:8080/ ;server:https://b.com/api/xxx

2、加载图片 css js 可无视同源策略

  • <img/> 可用于统计打点,可使用第三方统计服务
  • <link/> 可使用 CDN,CDN 一般都是外域
  • <script/> 可实现 JSONP
    <img src="跨域的图片地址"/>
    <link href="跨域的css地址"/>
    <script src="跨域的js地址"></script>

3、跨域

  • 所有的跨域,都必须经过 server 端允许和配合
  • 未经 server 端允许就实现跨域,说明浏览器有漏洞、危险信号

三、实现跨域的常见方式 - JSONP 和 CORS

1、JSONP

  • <script> 可以绕过跨域限制
  • 服务器可以任意动态拼接数据返回
  • 所以,<script> 就可以获得跨域的数据,只要服务端愿意返回
  • npm install http-server -g 安装服务
  • http-server -p xxxx 设置服务地址并启动服务

  • 480c7c3227124a029e3d35d9505c206e.png1a5268c428f84ad0a4fdc7e0649aaf79.png
  // jsonp.js
  abc (
      {name: 'xxx'}
  )


  // Demo.html
    <script>
        window.abc = function (data) { 
            console.log(data)
        }
    </script>
    <script src="http://localhost:8002/jsonp.js?username=xxx&callback=abc"></script>

ec9c7d265bfa45c6ab6b227c0f9f2b19.png

2、jQuery 实现 jsonp

    $.ajax({
        url: 'http://localhost:8002/jsonp.js?username=xxx',
        dataType: 'jsonp',
        jsonpCallback: 'callback',
        success: function (data) {
            console.log(data)
        }
    })

3、CORS - 服务器设置 http header

出处:https://coding.imooc.com/lesson/400.html#mid=30315

da2f786708ab40ebb17e03f553bb0c02.png

四、手写一个简易的 AJAX(兼容 Promise)

  • 封装原生 ajax
    function ajax(url) {
        const p = new Promise((resolve, reject) => {
            const xhr = new XMLHttpRequest()
            xhr.open('GET', url, true)
            xhr.onreadystatechange = function() {
                if(xhr.readyState === 4) {
                    if(xhr.status === 200) {
                        resolve(
                            JSON.parse(xhr.responseText)
                        )
                    } else if (xhr.status === 404) {
                        reject(new Error('404 not found'))
                    }
                }
            }
            xhr.send(null)
        })
        return p
    }
  const url = './test.json'
    ajax(url)
    .then(res => console.log(res))
    .catch(err => console.error(err))

9d82f6b810144deeb9af2b09a42d2e2a.png

JavaScript-Web-API-存储

一、cookie

  • 本身用于浏览器和 server 通讯
  • 被 “借用” 到本地存储来
  • 可用 document.cookie = ‘…’ 来修改
  • 062ffae41ec449579baea18a391ce509.png

1、cookie 的缺点

  • 存储大小,最大4KB
  • http 请求时需要发送到服务端,增加请求数据量
  • 只能用 document.cookie = ‘…’ 来修改,太过简陋

二、localStorage 和 sessionStorage

两种存储详细内容参考链接

  • HTML5 专门为存储而设计,最大可存 5MB
  • API 简单易用 setItem、getItem
  • 不会随着 http 请求被发送过去

1、localStorage 和 sessionStorage 区别

  • localStorage 数据会永久存储,除非手动删除
  • sessionStorage 数据只存在于当前会话,浏览器关闭则清空
  • 一般用 localStorage 会更多一些

2、cookie 和 localStorage sessionStorage 区别

  • 容量:4KB VS 5MB
  • API 易用性:不易用 VS 易用
  • 是否随着 http 请求发送出去:发送 VS 不发送
  • 不积跬步无以至千里 不积小流无以成江海
相关文章
|
存储 前端开发 JavaScript
调用DeepSeek API增强版纯前端实现方案,支持文件上传和内容解析功能
本方案基于DeepSeek API增强版,提供纯前端实现的文件上传与内容解析功能。通过HTML和JavaScript,用户可选择文件并调用API完成上传及解析操作。方案支持多种文件格式(如PDF、TXT、DOCX),具备简化架构、提高响应速度和增强安全性等优势。示例代码展示了文件上传、内容解析及结果展示的完整流程,适合快速构建高效Web应用。开发者可根据需求扩展功能,满足多样化场景要求。
3841 64
|
前端开发 API UED
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
382 2
|
11月前
|
存储 安全 算法
Java 集合面试题 PDF 下载及高频考点解析
本文围绕Java集合面试题展开,详细解析了集合框架的基本概念、常见集合类的特点与应用场景。内容涵盖`ArrayList`与`LinkedList`的区别、`HashSet`与`TreeSet`的对比、`HashMap`与`ConcurrentHashMap`的线程安全性分析等。通过技术方案与应用实例,帮助读者深入理解集合类的特性和使用场景,提升解决实际开发问题的能力。文末附带资源链接,供进一步学习参考。
275 4
|
11月前
|
存储 安全 Java
Java 集合面试题从数据结构到 HashMap 源码剖析详解及长尾考点梳理
本文深入解析Java集合框架,涵盖基础概念、常见集合类型及HashMap的底层数据结构与源码实现。从Collection、Map到Iterator接口,逐一剖析其特性与应用场景。重点解读HashMap在JDK1.7与1.8中的数据结构演变,包括数组+链表+红黑树优化,以及put方法和扩容机制的实现细节。结合订单管理与用户权限管理等实际案例,展示集合框架的应用价值,助你全面掌握相关知识,轻松应对面试与开发需求。
504 3
|
Java 程序员
Java社招面试中的高频考点:Callable、Future与FutureTask详解
大家好,我是小米。本文主要讲解Java多线程编程中的三个重要概念:Callable、Future和FutureTask。它们在实际开发中帮助我们更灵活、高效地处理多线程任务,尤其适合社招面试场景。通过 Callable 可以定义有返回值且可能抛出异常的任务;Future 用于获取任务结果并提供取消和检查状态的功能;FutureTask 则结合了两者的优势,既可执行任务又可获取结果。掌握这些知识不仅能提升你的编程能力,还能让你在面试中脱颖而出。文中结合实例详细介绍了这三个概念的使用方法及其区别与联系。希望对大家有所帮助!
739 60
|
自然语言处理 JavaScript 前端开发
当面试官再问我JS闭包时,我能答出来的都在这里了。
闭包(Closure)是前端面试中的高频考点,广泛应用于函数式编程中。它不仅指函数内部定义的函数,还涉及内存管理、作用域链和垃圾回收机制。闭包可以让函数访问其外部作用域的变量,但也可能引发内存泄漏等问题。通过合理使用闭包,可以实现模块化、高阶函数和回调函数等应用场景。然而,滥用闭包可能导致代码复杂度增加、调试困难以及潜在的性能问题。为了避免这些问题,开发时应谨慎处理闭包,避免不必要的嵌套,并及时清理不再使用的变量和监听器。
564 16
当面试官再问我JS闭包时,我能答出来的都在这里了。
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
951 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
1161 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
Web App开发 前端开发 Linux
「offer来了」浅谈前端面试中开发环境常考知识点
该文章归纳了前端开发环境中常见的面试知识点,特别是围绕Git的使用进行了详细介绍,包括Git的基本概念、常用命令以及在团队协作中的最佳实践,同时还涉及了Chrome调试工具和Linux命令行的基础操作。
「offer来了」浅谈前端面试中开发环境常考知识点
|
Java 程序员
面试高频考点!关于构造方法的那些事儿
本文介绍了Java中的构造方法,包括其基本概念、默认构造方法、构造方法的重载、构造方法的细节以及执行顺序。通过具体示例,详细解释了构造方法在对象初始化中的重要作用,帮助读者在面试中更好地应对相关问题。
315 1