我使用的是AngularJS,并且有一个表单的action address是用AngularJS加载的。
当我提交表单时q
值在我的域和控制器地址之间传递,像这样:
http://localhost/?q=test#/en/search/
<li>
<form action="{{'/#/'+ Page.Culture + '/search'}}">
<input type="text" name="q" ><button type="submit">Search</button>
</form>
</li>
为什么?
您是否有意使用散列路由?查询字符串的位置是正确的哈希路由url - #
之后的一切都是客户端,而不是发送到服务器,不像查询字符串参数。因此,当浏览器提交表单时,URL变为http://locahost/?q=test#/en/search
。
Angular可以把一个URL放在一起,其中q
也在哈希之后,如文档中所示:
$location.path('/new').search('x=y');
$location.absUrl() == 'http://example.com/base/index.html#!/new?x=y'
,但您显然允许浏览器提交表单,它不会构造这样的URI,因为服务器根本不会接收参数q
。
您可以手动捕获提交事件和路由以获得更好的hashbang URI,或者您可以切换到HTML5模式以获得更漂亮的url。这也需要很少的后端支持,也就是说,除了特定的API端点之外,您将从任何请求的URL发送索引HTML页面。