【发布时间】:2009-05-20 14:58:40
【问题描述】:
我的网站上有一个基于 POST 的搜索功能。但是,现在我希望能够提供搜索某些关键字的链接,但这当然是不可能的,因为表单不处理 GET 请求。有没有办法解决这个问题?
【问题讨论】:
我的网站上有一个基于 POST 的搜索功能。但是,现在我希望能够提供搜索某些关键字的链接,但这当然是不可能的,因为表单不处理 GET 请求。有没有办法解决这个问题?
【问题讨论】:
使用超级全局
$_REQUEST
【讨论】:
将表单的方法设置为 GET
<form action="/search" method="GET">
如果您在服务器上的搜索应用程序允许通过 get 进行搜索,这将起作用。请注意,无论如何您都应该使用 GET 进行搜索。 POST是进行修改和发布数据。您正在“获取”搜索结果,因此请使用 GET。
【讨论】:
您可以使用 javascript 从链接中发布表单。如何执行此操作的示例位于此处:
http://mentaljetsam.wordpress.com/2008/06/02/using-javascript-to-post-data-between-pages/
【讨论】:
我会考虑更改您的表单以使用 GET 进行操作。
将 GET 用于搜索机制是合适的,因为 GET 方法用于幂等请求。即您可以重复执行它们而无需担心更改状态。 POST 的语义是您正在发布数据并执行更改(无论在这种情况下是否真的发生)
【讨论】:
<input type="text" id="searchcat"></input>
<form method="POST">
...
<input type="submit" onclick="this.form.action='/search?cat=' + document.getElementById('searchcat').value"></input>
</form>
也许这个解决方案会有所帮助?当然,“searchcat”控件似乎是一种组合框。并且 onclick 处理程序更适合用作 JS 函数,而不是内联...
实际上,当您单击此提交时 - 浏览器会生成所有 HTTP 标头,从您的表单数据中收集请求正文,然后使用 url 发送请求,其中包含 GET 变量。这样,您将在搜索服务器端处理程序中同时拥有 GET 和 POST 数据。
通过在控件上处理 onChange 来更改 GET 变量会更好。但是这个例子在没有 IDE 的情况下比较长并且难以阅读。
【讨论】: