首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有什么方法可以阻止GET方法表单发送空变量吗?

有什么方法可以阻止GET方法表单发送空变量吗?
EN

Stack Overflow用户
提问于 2012-04-09 05:12:21
回答 3查看 1.9K关注 0票数 2

在我的WordPress安装中,我使用以下表单作为高级搜索页面的一部分。

代码语言:javascript
复制
<form action="/advanced-search/" method="get">

表单工作正常,但生成的URL如下:

/advanced-search/page/3/?act=s&f=cichlidae&g&s&c&r&tmin&tmax&hmin&hmax&pHmin&pHmax&cmin&cmax&sF&sM&aL&aD&aH

有没有办法阻止表单发送那些空的变量?在上面的例子中,只搜索了f (值为cichlidae)。因此,我更希望它生成如下的URL:

/advanced-search/?act=s&f=cichlidae (如有必要,加上/page/3/ )。

我不能使用$_POST,因为我不能让WordPress paged变量处理$_POST值。

提前谢谢你,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-09 05:17:34

为什么不使用jQuery的serialize方法来收集字符串中的所有表单值?

代码语言:javascript
复制
$('form').submit(function() {
   var string = $(this).serialize();
   window.location.href = '/advanced-search/'+string;
});

它遍历所有的表单元素,收集它们的值,并将其转换为可读的字符串格式,以便在URL中使用。

票数 2
EN

Stack Overflow用户

发布于 2012-04-09 05:15:01

不是内置到表单中,否-如果字段存在,它将被发送。

您可以使用Javascript提交表单,从而省略空字段。

票数 1
EN

Stack Overflow用户

发布于 2012-04-09 05:17:21

不,没有JavaScript是没有办法的。如果有,这将是特定于浏览器的,因为是浏览器决定如何处理表单数据。

此外,还有以下内容:

代码语言:javascript
复制
foo.php?a=

...and此命令:

代码语言:javascript
复制
foo.php

...is在语义上不同。在前者中,通过一个空字符串传递a (""),而在后者中,根本不传递a (null)。

此外,POST在这里是正确的,因为表单是一个搜索表单,因此它正在检索数据,应该使用GET;而不是像Wordpress应该做的那样创建数据。

改变这一点的一种方法(不使用JavaScript)是使用网关脚本,该脚本从URL中删除空参数并重定向。

每个示例:

代码语言:javascript
复制
$newGET = array();
foreach ($_GET as $key => $value) {
    if ($value !== '') $newGET[$key] = $value;
}

header('Location: some/url?'.http_build_query($newGET));
exit;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10066558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档