我在javascript
var domain= http://example.com/api/v1/purchases/get_purchases.json?
var header = 'df0a96ddbe1ada9fda4b1ed9b02cf67c'
var params = {
search:{
status_eq: 'frozen',
email_eq: 'a@a.com',
phone_number_eq: ''
}
}
var api_string = domain + header + params;
我需要输出api_string为:
http://example.com/api/v1/purchases/get_purchases.json?headers%5B_token%5D=df0a96ddbe1ada9fda4b1ed9b02cf67c&search%5Bemail_eq%5D=a@a.com&search%5Bphone_number_eq%5D=12345&search%5Bstatus_eq%5D=frozen
我尝试了JSON.stringify, encodeURI, encodeURIComponent
,但它没有按预期工作。
我需要在api_string
的{{1}}函数中使用此fetch
。
答案 0 :(得分:1)
您可以使用序列化功能,如下所示:
serialize = function(obj, prefix) {
var str = [], p;
for(p in obj) {
if (obj.hasOwnProperty(p)) {
var k = prefix ? prefix + "[" + p + "]" : p, v = obj[p];
str.push((v !== null && typeof v === "object") ?
serialize(v, k) :
encodeURIComponent(k) + "=" + encodeURIComponent(v));
}
}
return str.join("&");
}
console.log(serialize(params));
给予:
search%5Bstatus_eq%5D=frozen&search%5Bemail_eq%5D=a%40a.com&search%5Bphone_number_eq%5D=`
答案 1 :(得分:0)
好消息,字符串连接只需+运算符即可完成。所以你可以做这样的事情
let result = domain + "headers%5B_token%5D=" + header + "&search%5Bemail_eq%5D=" + params.search.eqmail_eq
(显然对其余的参数进行扩展,假设你只有这三个参数)
答案 2 :(得分:0)
您是否尝试过使用npm包url
?
这是一个如何运作的例子:
const url = require('url')
let my_url = url.format({
hostname: "mydomain.com",
protocol: "http",
query: {status_eq: 'frozen', email_eq: 'a@a.com',},
pathname: '/my/path'
})
here is the documentation如果你需要了解它的工作原理。
警告强>
url.format
接收您要发送到服务器的参数的对象。如果要传递的参数之一是对象,请确保在将其添加到查询之前对其进行JSON.stringify。 Here is a stackoverflow question解释了它。