- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在标题中设置 _boundry
。
首先,我发送表单数据:
//component.js
const form = new FormData();
form.append('email', 'eray@serviceUser.com')
form.append('password', '12121212')
dispatch(FetchLogin.action(form))
其次,我准备api调用;
//loginService.js
import api from '@/Services'
export default async form => {
const response = await api.post('user/login/', form)
return response.data
}
第三,调用api;
//Services/index.js
import axios from 'axios'
import { Config } from '@/Config'
const instance = axios.create({
baseURL: Config.API_URL,
headers: {
'Content-Type': `multipart/form-data; boundary=${form._boundary}`, //Cannot access form here
},
timeout: 3000,
})
instance.interceptors.response.use(
response => response,
({ message, response: { data, status } }) => {
return handleError({ message, data, status })
},
)
export default instance
我想访问 axios
instance
中的 form
数据,以便能够在 form._boundry
中使用 header
。
如何将 form
数据从 loginService.js
传递到 Services/index.js
?
最佳答案
这个问题似乎经常出现,但我似乎找不到规范的答案,所以这里...
当从浏览器执行 AJAX 请求时(通过 fetch
或 XMLHttpRequest
),运行时知道对某些请求主体格式做什么,并将自动设置适当的 内容类型
标题
如果请求体是一个FormData
实例,Content-type
将被设置为multipart/form-data
并且还将包括来自数据实例的适当的 MIME 边界标记。
所有这些示例都会将数据发布为 multipart/form-data
并带有适当的 mime boundary tokens
const body = new FormData();
// attach files and other fields
body.append("file", fileInput.files[0]);
body.append("foo", "foo");
body.append("bar", "bar");
// fetch
fetch(url, { method: "POST", body });
// XMLHttpRequest
const xhr = new XMLHttpRequest();
xhr.open("POST", url);
xhr.send(body);
// Axios
axios.post(url, body);
如果请求体是一个URLSearchParams
实例,Content-type
将被设置为application/x-www-form-urlencoded
所有这些示例都会将数据发布为 application/x-www-form-urlencoded
const body = new URLSearchParams({ foo: "foo", bar: "bar" });
// serialises to "foo=foo&bar=bar"
// fetch
fetch(url, { method: "POST", body });
// XMLHttpRequest
const xhr = new XMLHttpRequest();
xhr.open("POST", url);
xhr.send(body);
// Axios
axios.post(url, body);
如果你打算发送特定格式的字符串数据,你只需要手动设置content-type
,例如text/xml
, application/json
等,因为运行时无法从数据中推断出类型。
const body = JSON.stringify({ foo: "foo", bar: "bar" });
// fetch
fetch(url, {
method: "POST",
headers: {
"content-type": "application/json",
},
body
});
// XMLHttpRequest
const xhr = new XMLHttpRequest();
xhr.open("POST", url);
xhr.setRequestHeader("content-type", "application/json");
xhr.send(body);
Axios 会自动将传递给 data
参数的 JavaScript 数据结构字符串化,并将 Content-type
header 设置为 application/json
,这样您只需处理 JSON API 时需要最少的配置
// no extra headers, no JSON.stringify()
axios.post(url, { foo: "foo", bar: "bar" })
在底层,Axios 使用 XMLHttpRequest
,因此 FormData
和 URLSearchParams
的规范也适用。
此特定版本的 Axios 无法使用 FormData
发出正确的请求。不要使用它!
当从后端使用 Axios 时,它不会从 FormData
实例中推断出 Content-type
header 。您可以使用请求拦截器解决此问题。
axios.interceptors.request.use(config => {
if (config.data instanceof FormData) {
Object.assign(config.headers, config.data.getHeaders());
}
return config;
}, null, { synchronous: true });
或者在发出请求时简单地合并到 header 中
axios.post(url, body, {
headers: {
"X-Any-Other-Headers": "value",
...body.getHeaders(),
},
});
参见 https://github.com/axios/axios#form-data
jQuery 的 $.ajax()
方法(以及像 $.post()
这样的便捷方法)默认将请求主体有效负载发送为 application/x-www - 形式 urlencoded
。 JavaScript 数据结构将使用 jQuery.param() 自动序列化。除非告诉不要。如果想让浏览器根据body格式自动设置Content-type
头部,还需要在options中配置
const body = new FormData()
body.append("foo", "foo")
body.append("bar", "bar")
$.ajax({
url,
method: "POST",
data: body,
contentType: false, // let the browser figure it out
processData: false // don't attempt to serialise data
})
关于javascript - 将数据传递给 Axios 中的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68643330/
Github:https://github.com/jjvang/PassIntentDemo 我一直在关注有关按 Intent 传递对象的教程:https://www.javacodegeeks.c
我有一个 View ,其中包含自动生成的 text 类型的 input 框。当我单击“通过电子邮件发送结果”按钮时,代码会将您带到 CalculatedResults Controller 中的 Em
我有一个基本的docker镜像,我将以此为基础构建自己的镜像。我没有基础镜像的Dockerfile。 基本上,基本镜像使用两个--env arg,一个接受其许可证,一个选择在容器中激活哪个框架。我可以
假设我想计算 2^n 的总和,n 范围从 0 到 100。我可以编写以下内容: seq { 0 .. 100 } |> Seq.sumBy ((**) 2I) 但是,这与 (*) 或其他运算符/函数不
我有这个网址: http://www.example.com/get_url.php?ID=100&Link=http://www.test.com/page.php?l=1&m=7 当我打印 $_G
我想将 window.URL.createObjectURL(file) 创建的地址传递给 dancer.js 但我得到 GET blob:http%3A//localhost/b847c5cd-aa
我想知道如何将 typedef 传递给函数。例如: typedef int box[3][3]; box empty, *board[3][3]; 我如何将 board 传递给函数?我
我正在将一些代码从我的 Controller 移动到核心数据应用程序中的模型。 我编写了一个方法,该方法为我定期发出的特定获取请求返回 NSManagedObjectID。 + (NSManagedO
为什么我不能将类型化数组传递到采用 any[] 的函数/构造函数中? typedArray = new MyType[ ... ]; items = new ko.observableArray(ty
我是一名新的 Web 开发人员,正在学习 html5 和 javascript。 我有一个带有“选项卡”的网页,可以使网页的某些部分消失并重新出现。 链接如下: HOME 和 JavaScript 函
我试图将对函数的引用作为参数传递 很难解释 我会写一些伪代码示例 (calling function) function(hello()); function(pass) { if this =
我在尝试调用我正在创建的 C# 项目中的函数时遇到以下错误: System.Runtime.InteropServices.COMException: Operation is not allowed
使用 ksh。尝试重用当前脚本而不修改它,基本上可以归结为如下内容: `expr 5 $1 $2` 如何将乘法命令 (*) 作为参数 $1 传递? 我首先尝试使用“*”,甚至是\*,但没有用。我尝试
我一直在研究“Play for Java”这本书,这本书非常棒。我对 Java 还是很陌生,但我一直在关注这些示例,我有点卡在第 3 章上了。可以在此处找到代码:Play for Java on Gi
我知道 Javascript 中的对象是通过引用复制/传递的。但是函数呢? 当我跳到一些令人困惑的地方时,我正在尝试这段代码。这是代码片段: x = function() { console.log(
我希望能够像这样传递参数: fn(a>=b) or fn(a!=b) 我在 DjangoORM 和 SQLAlchemy 中看到了这种行为,但我不知道如何实现它。 最佳答案 ORM 使用 specia
在我的 Angular 项目中,我最近将 rxjs 升级到版本 6。现在,来自 npm 的模块(在 node_modules 文件夹内)由于一些破坏性更改而失败(旧的进口不再有效)。我为我的代码调整了
这个问题在这里已经有了答案: The issue of * in Command line argument (6 个答案) 关闭 3 年前。 我正在编写一个关于反向波兰表示法的 C 程序,它通过命
$(document).ready(function() { function GetDeals() { alert($(this).attr("id")); } $('.filter
下面是一个例子: 复制代码 代码如下: use strict; #这里是两个数组 my @i =('1','2','3'); my @j =('a','b','c'); &n
我是一名优秀的程序员,十分优秀!