您好,感谢您抽出时间来解决这个问题。
我正在使用jQuery进行实时搜索的搜索表单。搜索栏位于我网站的每个页面上,工作正常。现在我想扩展它。当人们点击Enter键时,我希望他们被重定向到搜索页面,在那里他们可以获得所有结果。
唯一的问题是Get方法无效。 我的表格看起来像这样:
<form action="search/search" id="Searchform" method="GET">
<p><input type="text" name="SearchInput" id="SearchInput" value="" onkeyup="lookup(this.value);" /></p>
<div class="clear"></div>
<div id="suggestions"></div>
</form>
我的.htaccess文件包含搜索页面的重写规则:
RewriteRule ^search/([^/]*)$ search.php?mode=$1 [L]
Evey时间我点击Enter按钮我得到了这个:
search/search?SearchInput=moonwalker
使用GET方法我似乎无法获得SearchInput的值。
使用POST方法时一切正常。但我在不同的文章中读到,我真的应该使用GET方法进行搜索。
所以我的问题是:为什么我要将GET方法用于搜索页面?如果我决定使用POST而不是GET方法,有什么大的优势吗?
我知道我可以使用重定向等来完成GET方法,但我只是想知道为什么POST在搜索表单中被认为是不好的做法。
提前感谢您的帮助!
答案 0 :(得分:5)
您需要重新附加查询字符串:
RewriteRule ^search/([^/]*)$ search.php?mode=$1 [L,QSA]
上面的 QSA 是神奇的。否则,?
之后的网址中的所有内容都会被截断并替换为新的查询字符串?mode=foo
。
回答这个问题:出于几个原因,优良做法是使用GET(仅创建视图的所有内容)和使用POST更改请求(例如,发布评论或新产品)进行非转换查询。 Eric Petroelje在回答中给出了一些理由。当你谷歌进行REST + GET + POST时,可以找到其他一些。 (这导致例如SO question)
答案 1 :(得分:4)
我想知道为什么要在搜索屏幕上使用GET,有几个原因: