Javascript Axios如何设置类似于jQuery ajax方法的表单数据?

Javascript Axios如何设置类似于jQuery ajax方法的表单数据?,javascript,jquery,ajax,reactjs,axios,Javascript,Jquery,Ajax,Reactjs,Axios,我在应用程序中使用axios,但我很难设置请求的内容 当前使用$调用URL。ajax如下所示: $.ajax({ method: 'POST', data: { 'accountId': accountId }, url: serverUrl, /* success: ... */ }); 当我在Chrome开发工具中查看此请求时,最后我看到如下内容: $.ajax({ method: 'POST', data: { 'accountId': accountId },

我在应用程序中使用axios,但我很难设置请求的内容

当前使用
$调用URL。ajax
如下所示:

$.ajax({
  method: 'POST',
  data: { 'accountId': accountId },
  url: serverUrl,
  /* success: ... */
});
当我在Chrome开发工具中查看此请求时,最后我看到如下内容:

$.ajax({
  method: 'POST',
  data: { 'accountId': accountId },
  url: serverUrl,
  /* success: ... */
});

现在,我正试图用axios做同样的事情:

axios.post(serverUrl, { accountId: accountId })
  .then(/* ... */);
但是,当我在Chrome dev tools中查看请求时,我发现:

如何让axios执行与jQuery相同的格式设置?也许问题是:它们是不同的还是仅仅是代表性

另外,我注意到jQuery调用以某种方式添加了这个头:
x-request-with:XMLHttpRequest
,但是要在axios中使用相同的头,我必须手动设置它。这正常吗?我是否缺少添加此标头的axios配置

谢谢

如文件所述,您可以使用axios使用以
应用程序/x-www-form-urlencoded
格式发送数据

来自官方文档的示例:

var params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params);

例如,一些框架使用此标头来检测XHR请求。GrailsSpring使用此标头来标识查询XHR,并将JSON响应或HTML响应作为响应

大多数Ajax库(Prototype、2.1版的JQuery和Dojo)都包含X-Requested-With头,这表明查询是使用XMLHttpRequest进行的,而不是通过单击常规超链接或提交表单按钮来运行

安全性的一个很好的理由是它可以防止攻击,因为未经服务器通过的同意,不能将此头添加到AJAX请求的跨域中

仅允许以下标题:

  • 接受
  • 接受语言
  • 内容语言
  • 最后事件ID
  • 内容类型
其他人在CORS支持的浏览器中调用“飞行前”请求

没有CORS,X-Requested-With无法添加到跨域的XHR请求中

如果服务器检查是否存在此标头,则它知道该请求没有使用JavaScript从攻击者的域中尝试代表用户发出请求

它还检查请求是否不是从通常的HTML表单发送的,如果不使用令牌,则更难从该表单验证请求是否不是跨域的。(但是,在受支持的浏览器中可以是一个选项。)

另见:

因此,为了更好地理解,请阅读:

FormData()

请求有效负载


似乎您需要一个多部分表单数据请求-请参阅,或者它只是一个url编码的请求数据?谢谢您的回答,关于问题的第二部分,关于
x-request-with
标题,您有什么意见吗?感谢你盯着Axios,我看不到任何地方设置了标题。如果希望为所有请求设置它,可以执行以下操作:
axios.defaults.headers.common['x-request-with']='XMLHttpRequest'
这是jquery(和其他多个ajax库)使用的约定使服务器能够轻松地根据是否是ajax请求从同一端点提供不同的响应。在PHP脚本中,经常会检查此标题,然后呈现一个带有布局的完整页面,或者仅呈现使用ajax时可以注入页面的内容;我很乐意帮忙:)谢谢你详细的回答。问:我们说它有利于安全性,因为它不能为跨域请求添加,但事实上,我们可以配置axios并添加此标头,这是否意味着我们以某种方式绕过了安全部分?