关于vue axios不能发送数组问题

和后台对接数据时候遇到一个问题,怎么也发送不了数组,刚开始以为是因为参数是一个json对象的原因 ,这个问题调试了一下午,到第二天早上才发现可能是数组原因,

于是乎,解决了,利用URLSearchParams对象解决

 let params = new URLSearchParams();
        params.append(‘dataName‘, this.activeName);
        params.append(‘dataBody‘,JSON.stringify(this.searchTableItemSave));

 

URLSearchParams是什么?

URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串,调用new URLSearchParams()会返回一个 URLSearchParams 对象实例

接口方法

append(name, value):插入一个指定的键/值对作为新的搜索参数。
其中name是需要插入搜索参数的键名,value是需要插入搜索参数的对应值。

let url = new URL(‘https://example.com?foo=1&bar=2‘);
let params = new URLSearchParams(url.search.slice(1));

//添加第二个foo搜索参数。
params.append(‘foo‘, 4);
params.toString();
// ‘foo=1&bar=2&foo=4‘

delete(name):从搜索参数列表里删除指定的搜索参数及其对应的值。
name是需要删除的键值名称。

let url = new URL(‘https://example.com?foo=1&bar=2‘);
let params = new URLSearchParams(url.search.slice(1));

//添加第二个foo搜索参数。
params.delete(‘foo‘);
params.toString();
// ‘bar=2‘

  

entries():返回一个iterator可以遍历所有键/值对的对象。

// 创建一个测试用 URLSearchParams 对象
let searchParams = new URLSearchParams("key1=value1&key2=value2");

// 显示键/值对
for(var pair of searchParams.entries()) {
   console.log(pair[0]+ ‘, ‘+ pair[1]);
}

// key1, value1
// key2, value2

  

delete(name):从搜索参数列表里删除指定的搜索参数及其对应的值。
name是需要删除的键值名称。

let url = new URL(‘https://example.com?foo=1&bar=2‘);
let params = new URLSearchParams(url.search.slice(1));

//添加第二个foo搜索参数。
params.delete(‘foo‘);
params.toString();
// ‘bar=2‘

  

entries():返回一个iterator可以遍历所有键/值对的对象。

// 创建一个测试用 URLSearchParams 对象
let searchParams = new URLSearchParams("key1=value1&key2=value2");

// 显示键/值对
for(var pair of searchParams.entries()) {
   console.log(pair[0]+ ‘, ‘+ pair[1]);
}

// key1, value1
// key2, value2

  

get(name):获取指定搜索参数的第一个值。
name是将要返回的参数的键名。返回一个USVString;如果没有,则返回null
如果一个页面的URL是 https://example.com/?name=Jonathan&age=18 ,你可以这样解析参数nameage:

let params = new URLSearchParams(document.location.search.substring(1));
let name = params.get("name"); // is the string "Jonathan"
let age = parseInt(params.get("age"), 10); // is the number 18

// 查找一个不存在的键名则返回 null:
let address = params.get("address"); // null

  

getAll(name):获取指定搜索参数的所有值,返回是一个数组。
name是返回的参数的名称。

let url = new URL(‘https://example.com?foo=1&bar=2‘);
let params = new URLSearchParams(url.search.slice(1)); 

//为foo参数添加第二个值
params.append(‘foo‘, 4);

console.log(params.getAll(‘foo‘))‘ //输出 ["1","4"].

  

has(name):返回 Boolean 判断是否存在此搜索参数。
name 是我们要查询的参数的键名。

let url = new URL(‘https://example.com?foo=1&bar=2‘);
let params = new URLSearchParams(url.search.slice(1));

params.has(‘bar‘) === true; //true

  

keys():返回iterator 此对象包含了键/值对的所有键名。

// 建立一个测试用URLSearchParams对象
let searchParams = new URLSearchParams("key1=value1&key2=value2"); 

// 输出键值对
for(var key of searchParams.keys()) {
  console.log(key);
}

// key1
// key2

  

set(name, value):设置一个搜索参数的新值,假如原来有多个值将删除其他所有的值
其中name是需要插入修改参数的键名,value是需要插入搜索参数的新值。

let url = new URL(‘https://example.com?foo=1&bar=2‘);
let params = new URLSearchParams(url.search.slice(1));

//Add a third parameter.
params.set(‘baz‘, 3);

  

sort(): 按键名排序。

// Create a test URLSearchParams object
let searchParams = new URLSearchParams("c=4&a=2&b=3&a=1"); 

// Sort the key/value pairs
searchParams.sort();

// Display the sorted query string
console.log(searchParams.toString());

// a=2&a=1&b=3&c=4

  

toString():返回搜索参数组成的字符串,可直接使用在URL上。

let url = new URL(‘https://example.com?foo=1&bar=2‘);
let params = new URLSearchParams(url.search.slice(1));

//Add a second foo parameter.
params.append(‘foo‘, 4);
console.log(params.toString());
//Prints ‘foo=1&bar=2&foo=4‘.

  

values():返回iterator 此对象包含了键/值对的所有值。

// 创建一个测试用URLSearchParams对象
let searchParams = new URLSearchParams("key1=value1&key2=value2");

// 输出值
for(var value of searchParams.values()) {
  console.log(value);
}  

使用URLSearchParams处理axios发送的数据

  在使用axios这个ajax插件的时候,我们有些时候会遇到一些问题,比如:数据格式不正确

  以最简单的例子为基础(这里使用post方法):

  

  在上面的例子中我们直接调用axios的post方法,传给后台的参数为json格式,这和jquery的ajax写法相当类似!

  但是,axios发送的数据格式和jquery ajax发送的默认数据格式却不相同,接下来让我们来看一下不同之处:

  1.axios的数据类型

  

  2.jquery ajax的数据类型

  

  看到这里,有的小伙伴就要说了,修改下ContentType不就好了,其实不然,即时是修改了ContentType,数据依然不正确:

  --------------------->

  通过度娘的各种检索,终于找到了答案: 使用URLSearchParams来处理参数,URLSearchParams的兼容性并不高,所以使用的时候还是要注意(可以考虑使用babel来转换)

  具体的操作如下:

  ----------------->

  通过使用URLSearchParams的处理,我们就能像jquery ajax发送的数据一样了!!!

文章参考:https://www.cnblogs.com/coolle/p/7027950.html

      https://www.cnblogs.com/coolle/p/7027950.html

原文地址:https://www.cnblogs.com/zhupanpan/p/12165024.html

时间: 2024-10-08 10:51:39

关于vue axios不能发送数组问题的相关文章

vue axios 批量删除 数组参数

方法一:前端循环请求服务器端delete(id)方法 请问如何获得element-ui表格中的勾选项index,以实现批量删除功能 https://segmentfault.com/q/1010000012759131 方法二:传递 string类型字符串.例如: '1,2,3,4' ids =[1,2,3,4] url: '/investigator/submitAll/' + ids, method: 'post' 服务器端接收到: string类型字符串 '1,2,3,4' . 方法三:直

解决vue axios跨域请求发送两次问题

问题: vue axios跨域请求,在Request Headers加Authorization传递Token时,发现统一请求触发了两次,第一次是Request Method: OPTIONS请求. 原因: 跨域请求时,浏览器会首先使用OPTIONS方法发起一个预请求,判断接口是否能够正常通讯.如果通讯异常,则不会发送真正的请求,如果测试通讯正常,则开始真正的请求. 解决方法: 后台:判断请求方式是OPTIONS,则不处理: 预请求 发送真正请求  PHP解决方法 class Common ex

vue axios请求频繁时取消上一次请求

一.前言 在项目中经常有一些场景会连续发送多个请求,而异步会导致最后得到的结果不是我们想要的,并且对性能也有非常大的影响.例如一个搜索框,每输入一个字符都要发送一次请求,但输入过快的时候其实前面的请求并没有必要真的发送出去,这时候就需要在发送新请求的时候直接取消上一次请求.vue axios拦截器介绍 原文地址:https://www.cnblogs.com/lalalagq/p/9939542.html 二.代码 <script> import axios from 'axios' impo

Vue axios简单使用

Vue axios简单使用的简单使用 安装: npm install axios -D 有一个问题:我明明配置了全局可是用的时候还是得一个一个引入axios( 我也不知道为什么 ) main.js中引入axios 配置全局我这里是设置了代理 import axios from "axios"; Vue.prototype.$ajax = axios;//给他原型加一个属性为$ajax axios.defaults.baseURL = "/api"; api文件中放的

jquery发送数组

假设keywordid_list是一个javascript数组,将它发送到keywordbatchsetting.php. $.ajax({ url:"keywordbatchsetting.php", data:{"keywordid_list[]":keywordid_list}, type:"GET", traditional:true, success:function(msg){ } }); jquery发送数组,布布扣,bubuko.

从vue渲染想到的数组方法

1 <div id="app"> 2 <ul> 3 <li v-for='item in goods'>{{item}}</li> 4 </ul> 5 6 <div>{{a}}</div> 7 8 <button v-on:click='demo'>click</button>//由于js的弱点导致的,vue无法检测到数组内部的变化,只能检测到地址变化 9 </div>

基于Vue + axios + WebApi + NPOI导出Excel文件

一.前言 项目中前端采用的Element UI 框架, 远程数据请求,使用的是axios,后端接口框架采用的asp.net webapi,数据导出成Excel采用NPOI组件.其业务场景,主要是列表页(如会员信息,订单信息等)表格数据导出,如表格数据进行了条件筛选,则需要将条件传至后端api,筛选数据后,导出成Excel. 思考过前端导出的3种方案: 1.使用location.href 打开接口地址.缺点: 不能传token至后端api, 无法保证接口的安全性校验,并且接口只能是get方式请求.

vue+axios+elementUI文件上传与下载

vue+axios+elementUI文件上传与下载 Simple_Learn 关注 0.5 2018.05.30 10:20 字数 209 阅读 15111评论 4喜欢 6 1.文件上传 这里主要介绍一种,elementUI官网 上传组件 http-request 这种属性的使用. 图片.png 代码如下: <el-upload class="uploadfile" action="" :http-request='uploadFileMethod' :sh

Vue axios发送Http请求

axios 1.cnpm install axios --save 2.在vue文件中引入,import Axios from 'axios' 3.使用,Axios.get(url).then((res)=>{}).catch((err)=>{}) <template> <div id="app"> <div v-html="htmlValue"></div> </div> </templ