首页 > 解决方案 > 无法使用 searchParams 复制表单数组

问题描述

我有这个输入<select class="form-select" name="filters[]">,当我提交表单时,我在 url 中得到这种格式:https://example.com/search?filters%5B%5D=post

post选择的选项的值在哪里。现在我正在用 AJAX 构建一个负载更多的系统,所以我需要复制filter参数,所以尝试了:

let url = new URL('<?= base_url('search') ?>');
url.searchParams.append('filters', JSON.stringify(filters));

但是 JS 生成的 url 是不同的:

/search?filters%5B%5D <- correct
/search?filters=%5B%22post%22%5D <- incorrect

我做错了什么?

标签: javascriptphp

解决方案


根据当前输出,filters是一个包含单个字符串的数组:["post"]

console.log( decodeURIComponent("%5B%22post%22%5D") )

要获得所需的查询字符串,

  • 根据 上的name属性select,键应该是"filters[]",而不是"filter"
  • 该值必须是一个字符串,如"post". 您正在传递一个数组的 JSON 字符串,例如'["post"]'

const params = new URLSearchParams()
params.append("filters[]", 'post')

console.log(
  params.toString()
)


推荐阅读