Javascript HTML表单获取变量到URL变量

Javascript HTML表单获取变量到URL变量,javascript,html,forms,flask,Javascript,Html,Forms,Flask,好的,我有一个常规的搜索表单(method=“GET”)。问题是,它的控制器需要如下url: search/ 我的问题是,如何使上述URL重定向,而不是: /search?q=jfiejfiaj 我需要使用JS还是可以使用纯HTML?您是否使用MVC方法来处理web应用程序?您需要在Apache上使用mod rewrite来更改服务器上的url请求 编辑: 我不确定是否有更好的方法使用html表单本身,但将html表单发送到包含以下两个或更好的页面:两者都有 Meta(Html):(使用php

好的,我有一个常规的搜索表单(
method=“GET”
)。问题是,它的控制器需要如下url:

search/

我的问题是,如何使上述URL重定向,而不是:

/search?q=jfiejfiaj


我需要使用JS还是可以使用纯HTML?

您是否使用MVC方法来处理web应用程序?您需要在Apache上使用mod rewrite来更改服务器上的url请求


编辑:


我不确定是否有更好的方法使用html表单本身,但将html表单发送到包含以下两个或更好的页面:两者都有

Meta(Html):(使用php)


不使用纯HTML。您可以将提交事件处理程序附加到表单,阻止默认提交,在表单上使用参数构建新url,然后重定向。然而,对于仅仅获得漂亮的URL来说,这是一个非常糟糕的解决方案

忽略这一点,我会这样做:

<form method="get" action="/search">
<input type="text" name="keyword" />
<button>Search</button>
</form>
<script>
$('form').submit(function() {
    var form = $(this);
    var params = [];

    $('input', form).each(function(i, item) {
        var input = $(item);

        params[input.prop('name')] = input.val();
    });

    url = form.prop('action');

    for(var param in params) {
        url += '/' + encodeURIComponent(param) + '/' + encodeURIComponent(params[param]);
    }

    document.location = url;

    return false;
});
</script>

搜索
$('form')。提交(函数(){
变量形式=$(此);
var参数=[];
$('input',form.)。每个(函数(i,项){
变量输入=$(项目);
params[input.prop('name')]=input.val();
});
url=form.prop('action');
for(参数中的变量参数){
url+='/'+encodeURIComponent(param)+'/'+encodeURIComponent(params[param]);
}
document.location=url;
返回false;
});

是类似的问题和完整的说明。恐怕您需要在服务器上使用JS或mod_rewrite在单击搜索时,是否将页面重定向到该URL?或者你是用AJAX获取搜索结果并用Javascript显示结果?我想你说的是ASP.NETMVC@sabithpocker不,这只是一个带有操作和方法属性的常规表单。@janisz是的,我担心是这样。我正在使用Flask。我想我使用的是MVC方法:我有控制器、模板和模型文件夹。我想问的是,我是否可以让一个表单提交请求到
/search/
,而不是
/search?q=query
。我认为一个可能的解决方案是使用JS捕获提交事件并手动重定向到搜索URL。这怎么可能呢?这是最佳解决方案吗?我不确定是否有更好的方法,但您可以将表单提交到一个小型定制php脚本,该脚本将重定向到请求的页面。您可以使用php在url中回显表单的搜索词以进行重定向。要真正重定向,可以使用php或javascript。我编辑了我的答案,并将其放在一些示例代码中。谢谢,我只是想知道是否还有其他方法。
window.location.href = "http://stackoverflow.com/?search=<?php echo $_GET['search']; ?>";
<form method="get" action="/search">
<input type="text" name="keyword" />
<button>Search</button>
</form>
<script>
$('form').submit(function() {
    var form = $(this);
    var params = [];

    $('input', form).each(function(i, item) {
        var input = $(item);

        params[input.prop('name')] = input.val();
    });

    url = form.prop('action');

    for(var param in params) {
        url += '/' + encodeURIComponent(param) + '/' + encodeURIComponent(params[param]);
    }

    document.location = url;

    return false;
});
</script>