将字符串数组作为URLSearchParams发送

时间:2019-07-29 15:20:56

标签: javascript

我必须发送一个字符串数组作为URLParams。

我没有在客户端出现任何错误,也没有在服务器端出现错误。服务器期望使用以下格式的阵列:“ 500”,“ 600”,“ 500” 但是从我的客户端发送阵列时,它的格式为:“ 500,600,700”

下面是创建URL链接的代码。

const viewLinkStart = '/productdownload';
let viewLink = null;
let productIdStrArray: string[];
let params: URLSearchParams = new URLSearchParams();
params.set('CompanyId', companyId);
params.set('marketId', marketTypeId);
params.set('view', viewType);

let isBroker: boolean = companyType === 'BROKER' || companyType == 'NONBROKER';
params.set('Broker', isBroker.toString());

if (productIds) {
  productIdStrArray = productIds.map(e => {
    return String(e)
  });
  params.set('productIds', '' + productIdStrArray);
}

viewLink = UrlUtils.constructUrl(viewLinkStart, params);
viewLink = viewLink + '&' + 'filename' + '=' +
  (encodeURIComponent(marketName) + '_Product.xls');

如何实现发送“ 500”,“ 600”,“ 800”之类的字符串 而不是“ 500,600,700”。上面的代码在请求到达服务器时会生成“ 500,600,700”。

我无法更改服务器端代码。

谢谢

2 个答案:

答案 0 :(得分:0)

您得到的是“ 500、600、500”

由于:params.set('productIds', '' + productIdStrArray);

具体'' + productIdStrArray

这是强制性的,在这种情况下,必须将数组转换为字符串,因此在数组中调用方法toString(),并返回字符串"500, 600, 500"

要获取字符串:"500", "600", "500",请执行以下操作:

productIdsArray.join('","')

if (productIds) {
  productIdStrArray = productIds.map(e => {
    return String(e)
  });
  params.set('productIds', productIdStrArray.join('","'));
}

答案 1 :(得分:0)

'' + productIdStrArray将调用Array.toString,它将以字符串形式连接由,分隔的数组元素,而应该使用productIdStrArray.join('","')来连接它们:

params.set('productIds',productIdStrArray.join('","'))

const productIds = [1, 2, 3]
const productIdStrArray = productIds.map(e => {
  return String(e)
});

const result = '' + productIdStrArray;

console.log({
  productIdStrArray: productIdStrArray.join('","')
});

console.log({
  result
})