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

相关文章

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解