2012-04-08 57 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; 
相關問題