和后台對接數據時候遇到一個問題,怎么也發送不了數組,剛開始以為是因為參數是一個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
,你可以這樣解析參數name
和age
:
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發送的數據一樣了!!!