关于vueaxios不能发送数组问题
和后台对接数据时候遇到⼀个问题,怎么也发送不了数组,刚开始以为是因为参数是⼀个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('example?foo=1&bar=2');
let params = new URLSearchParams(url.search.slice(1));
//添加第⼆个foo搜索参数。
params.append('foo', 4);
// 'foo=1&bar=2&foo=4'
delete(name):从搜索参数列表⾥删除指定的搜索参数及其对应的值。
name是需要删除的键值名称。
let url = new URL('example?foo=1&bar=2');
let params = new URLSearchParams(url.search.slice(1));
/
/添加第⼆个foo搜索参数。
params.delete('foo');
// 'bar=2'
entries():返回⼀个iterator可以遍历所有键/值对的对象。
// 创建⼀个测试⽤ URLSearchParams 对象
let searchParams = new URLSearchParams("key1=value1&key2=value2");
// 显⽰键/值对
for(var pair ies()) {
console.log(pair[0]+ ', '+ pair[1]);
}
/
/ key1, value1
// key2, value2
delete(name):从搜索参数列表⾥删除指定的搜索参数及其对应的值。
name是需要删除的键值名称。
let url = new URL('example?foo=1&bar=2');
let params = new URLSearchParams(url.search.slice(1));
//添加第⼆个foo搜索参数。
params.delete('foo');
// 'bar=2'
entries():返回⼀个iterator可以遍历所有键/值对的对象。
/
/ 创建⼀个测试⽤ URLSearchParams 对象
let searchParams = new URLSearchParams("key1=value1&key2=value2");
// 显⽰键/值对
for(var pair ies()) {
console.log(pair[0]+ ', '+ pair[1]);
}
// key1, value1
// key2, value2
let params = new URLSearchParams(document.location.search.substring(1));
let name = ("name"); // is the string "Jonathan"
let age = ("age"), 10); // is the number 18
/
/ 查⼀个不存在的键名则返回 null:
let address = ("address"); // null
getAll(name):获取指定搜索参数的所有值,返回是⼀个数组。
name是返回的参数的名称。
let url = new URL('example?foo=1&bar=2');
let params = new URLSearchParams(url.search.slice(1));
//为foo参数添加第⼆个值
params.append('foo', 4);
console.All('foo'))' //输出 ["1","4"].
has(name):返回 Boolean 判断是否存在此搜索参数。
name是我们要查询的参数的键名。
let url = new URL('example?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('example?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.String());
// a=2&a=1&b=3&c=4
toString():返回搜索参数组成的字符串,可直接使⽤在URL上。
let url = new URL('example?foo=1&bar=2');
let params = new URLSearchParams(url.search.slice(1));
//Add a second foo parameter.
params.append('foo', 4);
console.String());
//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,数据依然不正确:
substring和slice
  --------------------->
  通过度娘的各种检索,终于到了答案:使⽤URLSearchParams来处理参数,URLSearchParams的兼容性并不⾼,所以使⽤的时候还是要注意(可以考虑使⽤babel来转换)
  具体的操作如下:
  ----------------->
  通过使⽤URLSearchParams的处理,我们就能像jquery ajax发送的数据⼀样了

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。