axios03-解决请求头兼容导致跨域报错问题

2024-09-02 15:48

本文主要是介绍axios03-解决请求头兼容导致跨域报错问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

不同版本接口区别老版本接口(form形式)新版本接口(json形式)
请求头application/x-www-form-urlencodedapplication/json;charset=UTF-8
参数格式序列化字符串: key1=value1&key2=value2json格式字符串 :{key1:value1}
接口请求头和参数错误提示(1)服务器返回:参数错误
(2)状态码400
(1)服务器返回:参数错误
(2)状态码400
(3)跨域报错
  • 1.老版本的后台接口post请求头是:application/x-www-form-urlencoded

    • axios不支持

    • 解决方案

      • 1.设置axios请求头为application/x-www-form-urlencoded

        • headers: {'Content-type': 'application/x-www-form-urlencoded'}
          
      • 2.将参数拼接为:key1=value1&key2=value2

        • 使用qs第三方包来拼接:Qs.stringify({username: 'zxk'})
          • qs网站:https://www.npmjs.com/package/qs
  • 2.新版本的后台接口post请求头是:application/json;charset=UTF-8

    • axios默认支持,不需要任何处理
/*1.学习目标介绍 : axios解决post请求兼容性问题2.学习路线 :(1)post请求头类型a.在很久很久以前,ajax技术没有发明以前,浏览器发送请求使用的是form表单来发送,form表单默认的请求头是:application/x-www-form-urlencodedb.后来ajax技术发明之后,由于之前的服务器处理post请求都是按照表单的默认请求头方式来处理所以,ajax发送post请求,一般也设置请求头为:application/x-www-form-urlencodedc. axios技术发明之后,此时json数据格式传输已经越来越流行,所以在axios中post请求默认的请求头是:'Content-Type: application/json;charset=UTF-8'd. 不同的请求头,服务器在处理的时候方式不一样。所以前后端必须要统一总结:a. 老接口的post请求头是:application/x-www-form-urlencoded这种方式参数会以:  'key1=value1&key2=value2'形式传输后台处理方式:字符串切割获取参数b. 新接口的post请求头是: application/json;charset=UTF-8这种方式参数会以json格式传输: '{"key":"value"}'这种方式处理:JSON.parse()解析(2)axios解决post请求兼容性a. 如果你的后台是新接口,则不需要任何处理。(axios默认json格式)b. 如果你的后台是老接口(1)需要设置axios的请求头为:application/x-www-form-urlencoded(2)需要将参数转为拼接方式:key1=value1&key2=value2(3)使用axios后如何判断后台是老接口还是新接口?a. 有的服务器会返回一段文本提示你:参数格式错误b. 有的服务器直接返回400错误码,也是提示你参数格式错误  c. 有的服务器会直接报错跨域   */
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head><body><button id="btn1">点我发送post请求(老接口)</button><button id="btn2">点我发送post请求(新接口)</button><!-- 导入axios --><script src="./axios.js"></script><script src="./qs.js"></script><form action="" enctype="application/x-www-form-urlencoded"></form><script>/*1.学习目标介绍 : axios解决post请求兼容性问题2.学习路线 :(1)post请求头类型a.在很久很久以前,ajax技术没有发明以前,浏览器发送请求使用的是form表单来发送,form表单默认的请求头是:application/x-www-form-urlencodedb.后来ajax技术发明之后,由于之前的服务器处理post请求都是按照表单的默认请求头方式来处理所以,ajax发送post请求,一般也设置请求头为:application/x-www-form-urlencodedc. axios技术发明之后,此时json数据格式传输已经越来越流行,所以在axios中post请求默认的请求头是:'Content-Type: application/json;charset=UTF-8'd. 不同的请求头,服务器在处理的时候方式不一样。所以前后端必须要统一总结:a. 老接口的post请求头是:application/x-www-form-urlencoded这种方式参数会以:  'key1=value1&key2=value2'形式传输后台处理方式:字符串切割获取参数b. 新接口的post请求头是: application/json;charset=UTF-8这种方式参数会以json格式传输: '{"key":"value"}'这种方式处理:JSON.parse()解析(2)axios解决post请求兼容性a. 如果你的后台是新接口,则不需要任何处理。(axios默认json格式)b. 如果你的后台是老接口(1)需要设置axios的请求头为:application/x-www-form-urlencoded(2)需要将参数转为拼接方式:key1=value1&key2=value2(3)使用axios后如何判断后台是老接口还是新接口?a. 有的服务器会返回一段文本提示你:参数格式错误b. 有的服务器直接返回400错误码,也是提示你参数格式错误  c. 有的服务器会直接报错跨域   *///post请求:老接口/* 1.设置请求头:headers: {'Content-type': 'application/x-www-form-urlencoded'}2.将参数转为字符串拼接方式一般使用第三库qs来转换*/btn1.onclick = function () {//(1)使用第三方库  qs来转换参数格式(推荐)let str1 = Qs.stringify({username: 'zxk'});console.log(str1);//(2)使用js原生对象URLSearchParams来处理 (好处:不需要导入Qs库)// var param = new URLSearchParams();// param.append('username','zxk');axios({url: 'https://autumnfish.cn/api/user/check',method: 'post',data: str1,headers: {'Content-type': 'application/x-www-form-urlencoded'}}).then(res => {console.log(res);})};//post请求:新接口//不需要任何处理btn2.onclick = function () {axios({url: 'http://ttapi.research.itcast.cn/mp/v1_0/authorizations',method: 'post',data: {mobile: '18801185985',code: '246810'},}).then(res => {console.log(res);})};</script>
</body></html>

这篇关于axios03-解决请求头兼容导致跨域报错问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130388

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”