gpt4 book ai didi

javascript - 为什么 jQuery 函数 param 用 [] 后缀数组的元素

转载 作者:行者123 更新时间:2023-12-04 08:05:36 25 4
gpt4 key购买 nike

使用时 $.param要将数组转换为查询字符串,生成的元素后缀为 [] .为什么会这样,我可以防止这种情况发生吗?$.param({p: [1, 2]}); -> "p%5B%5D=1&p%5B%5D=2"

最佳答案

这似乎是自 1.14 版以来定义的行为。
enter image description here
它已更改,因为具有相同名称的多个 URL 编码参数可能会导致冲突。所以每个值的键名被用作序列化字符串中的订阅参数:

var myObject = {
a: {
one: 1,
two: 2,
three: 3
}
};
console.log(decodeURIComponent( $.param( myObject ) ));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

该数组没有键,因此订阅保持为空:

var myObject = {
b: [ 1, 2, 3 ]
};
console.log(decodeURIComponent( $.param( myObject ) ));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

您可以将“传统”参数设置为 true 以模拟 1.14 之前的 jQuery 行为。

console.log($.param({p: [1,2]}, true ));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

或者您可以编写自己的数组序列化函数。

function serializeArray(parameter, arr){
var serialized = "";
for(var i = 0; i < arr.length; i++){
serialized += parameter + "[" + i + "]=" + arr[i];
if(i + 1 < arr.length) serialized += "&";
}
return serialized;
}

console.log(serializeArray("p", [1, 2]));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

关于javascript - 为什么 jQuery 函数 param 用 [] 后缀数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66237628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com