如何从没有字段的GET表单中删除尾随问号?

时间:2012-11-21 12:49:48

标签: html forms get

示例:

<form>
    <input type='submit'>
</form>

提交结果时:

http://example.com/?

如何制作:

http://example.com/

[这是一个非常简单的问题示例,实际表单有很多字段,但有些字段有时会被禁用。当所有人都被禁用时,尾随?出现]

6 个答案:

答案 0 :(得分:4)

在我的情况下,我使用 window.location ,不确定它是最好的选择,但它是唯一的选择我可以让它发挥作用:

$('#myform').submit(function()
{
    ... if all parameters are empty

    window.location = this.action;
    return false;
});

我真正的用途是将GET参数转换为真实的url路径,所以这里是完整的代码:

$('#myform').submit(function()
{
    var form = $(this),
        paths = [];

    // get paths
    form.find('select').each(function()
    {
        var self = $(this),
            value = self.val();

        if (value)
            paths[paths.length] = value;

        // always disable to prevent edge cases
        self.prop('disabled', true);
    });     

    if (paths.length)
        this.action += paths.join('/')+'/';

    window.location = this.action;
    return false;
});

答案 1 :(得分:0)

我正在寻找类似的答案。我最终做的是创建一个按钮,在单击时重定向到某个页面。

示例:

<button type="button" value="Play as guest!" title="Play as guest!" onclick="location.href='/play'">Play as guest!</button>

这不是你问题的“答案”,但可能是一个很好的解决方法。我希望这会有所帮助。

答案 2 :(得分:0)

不使用Javascript,我不确定是否有。缓解问题的一种方法可能是创建一个隐藏的输入,只保留一些垃圾值,你可以在另一边忽略这样的:

<input type="hidden" name="foo" value="bar" />

这样你就永远不会有空的GET请求。

答案 3 :(得分:0)

这是一个老帖子,但是嘿..这里你去了

如果您使用的是PHP,您可以将表单提交到“代理”页面,该页面将标题重定向到特定位置+查询。

例如:

HTML:

<form action="proxy.php" method="get"> 
   <input type="text" name="txtquery" />
   <input type="button" id="btnSubmit" />
</form>

PHP(proxy.php)

<?php

   if(isset($_GET['txtquery']))
      $query = $_GET['txtquery'];

       header("Location /yourpage/{$query}");


?>

我假设你正在尝试做什么

答案 4 :(得分:0)

另一种选择是在提交之前使用javascript检查FormData。

var myNeatForm = document.getElementById("id_of_form");
var formData = new FormData(myNeatForm); // Very nice browser support: https://developer.mozilla.org/en-US/docs/Web/API/FormData
console.log(Array.from(formData.entries())); // Should show you an array of the data the form would be submitting.


// Put the following inside an event listener for your form's submit button.
if (Array.from(formData.entries()).length > 0) {
    dealTypesForm.submit(); // We've got parameters - submit them!
} else {
    window.location = myNeatForm.action; // No parameters here - just go to the page normally.
}

答案 5 :(得分:0)

我知道这是一个非常老的问题,但是今天我遇到了同样的问题。我会从另一个角度来解决这个问题,我的想法是,在当今时代,您可能应该在表单中使用POST而不是GET,因为在查询字符串中传递值对安全性和GDPR不利。我们遇到了很多问题,其中各种跟踪脚本都在提取查询字符串(参数中包含PII),破坏了它们具有的任何服务条款。

通过发布,您将始终获得“干净的URL”,并且无需对表单提交脚本进行任何修改。但是,如果期望收到GET,则可能需要更改接收表单输入的任何内容。