2012-04-08 33 views
2

我使用以下表单作为WordPress安装的高级搜索页面的一部分。有没有办法阻止发送空变量的GET方法形式?

<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值一起使用。

由于提前,

回答

2

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

$('form').submit(function() { 
    var string = $(this).serialize(); 
    window.location.href = '/advanced-search/'+string; 
}); 

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

1

没有内置的形式,没有 - 如果该字段存在,它会被发送。

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

1

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

而且,这样的:

foo.php?a= 

...这:

foo.php 

...在语义上是不同的。在前者中,a以空字符串传递(""),而后者a根本不传递(null)。

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

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

每例如:

$newGET = array(); 
foreach ($_GET as $key => $value) { 
    if ($value !== '') $newGET[$key] = $value; 
} 

header('Location: some/url?'.http_build_query($newGET)); 
exit; 
相关问题