gpt4 book ai didi

javascript - 将复选框数组传递给 $_GET 的替代方法 - 除了方括号之外

转载 作者:行者123 更新时间:2023-11-28 06:19:14 25 4
gpt4 key购买 nike

据我了解,如果我使用 name[] 的复选框值,那么我将在服务器上收到一个名为“name[]”的数据数组(使用 PHP 时)。这对我来说效果很好,但我遇到了一些 URL 大小,可能会导致不太强大的 IE 浏览器出现问题,并且所有编码的方括号在这方面都让我很烦恼,很容易导致 URL 长度至少为 4-6如果有其他方法可用的话,比可能的时间长几倍。有没有一种可靠的方法使用javascript(jquery语法更好)来拦截复选框表单值并将它们转换成这样的东西:

“&checkboxarray=1-23-45-13-67”

我认为,在另一端,我可以轻松地将 $_GET['checkboxarray'] 分解为一个实际数组,然后从那里开始,就像我通常将选择数组与选项数组相匹配等一样......我只是不知道不知道是否可能或如何创建更改提交过程。

旁注,将“name[]”传递给 URL 是否不符合标准?我使用过的每个浏览器都会对其进行自动编码,但 Mozilla 不会,但它似乎工作正常。

编辑:我需要创建分页链接,这就是我使用 GET 而不是 POST 的原因。这也是工业搜索,非常全面,有很多高级用户选项。

更新和答案:我设法想出了自己的答案。对于想要利用 $_GET 的简单分页工作流程但需要传递大型数据数组并担心 URL 长度的任何其他人,这里有一种简单的方法将其全部压缩为一个带有短划线分隔值的变量:

注意:如果您要在提交后重新检查值,我强烈建议您首先确保从查询生成的任何动态数组都以 1 而不是 0 开头,具体方法如下,因为 0 可能会很痛苦在 PHP 条件语句中使用:

$your_array= array();

array_unshift($your_array,'');
unset($your_array[0]);

在您的 HTML 代码中,将所有复选框输入名称设置为“something[]”,并在这组输入下创建一个名为“something”的隐藏输入,我建议您使它们匹配,但我想您可以使用另一种名称,只需确保隐藏的名称缺少方括号,并将隐藏的输入值设置为“”:

<input type="text" name="something[]" value="1">
.....
<input type="text" name="something[]" value="20">
<input type="hidden" name="something" value="">

Javascript:注意,需要jquery...这会获取所有“something[]”输入值并形成一个虚线数组,同时阻止“something[]”值被提交并仅提交“something”。

$('#submitbutton').click(function(){

var searchIDs = $('input[name="something[]"]:checked').map(function(){
return $(this).val();
}).get();

var IDstring = searchIDs.toString();
var newvar = IDstring.replace(/,/g, '-');
$('input[name="something"]').val(newvar);
$('input[name="something[]"]:checkbox').prop("checked", false);


});

在服务器端,只需从 $_GET 中分解“something”值即可。

$somethingArray = explode('-',$_GET['something']);

就是这样!希望它能帮助将来的人使他们的 GET 发送数组更加紧凑。奖励:避免在 URL 中发送不安全字符,Mozilla 似乎不会自动编码方括号,至少我在 Linux Mint 上的版本不是;)

更新:

我刚刚在一个大国复选框表单上实现了这段代码,有 284 个可能的选择。使用我的旧代码,即使使用“c[]”作为名称,我的字符数约为 3100 个字符,使用新方法,我的字符数现在仅为 1109。值得付出努力。

最佳答案

您可以使用POST代替GET方法。

GET 有 URL 长度限制。

POST 在传递长数据时很有用,例如在你的情况下是一个数组。

POST 方法的默认限制为 2MB,远高于 GET。如果需要,可以在 php.ini 文件 post_max_size 10MB 中轻松增加。

将脚本中的 $_GET 替换为 $_POST

关于javascript - 将复选框数组传递给 $_GET 的替代方法 - 除了方括号之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35679604/

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