为什么有些表单会添加 ?action=submit to URL


Why do some forms add ?action=submit to URL

我有一堆包含表单的php页面。

有一些在我开始访问网站之前就已经存在的工作表单 - 它们都按预期工作,所以我使用这些表单来建模我正在编写的新表单。

我不明白的是,在旧的/工作版中,当表单提交且未通过验证时,URL保持原样,即"/form-name.php"

而自从复制这些以来,我的新表单会添加到 URL 中,例如"/表单名称.php?操作=提交"

我在表单中使用与现有表单相同的操作:

<form id="standard" action="?action=submit" method="post" enctype="multipart/form-data">

所有 php 脚本的顶部通过以下方式处理表单

if(isset($_REQUEST['action'])) {
    if($_REQUEST['action'] == "submit") {

我注意到的是,现有表单在检查验证时,它们只是弹出回页面顶部 - 而我的新表单,它们实际上刷新页面,就好像它提交,发现错误然后重新加载页面一样。

所以我只是想了解其中的区别,是什么决定了每个表单在提交时的反应。

编辑:更多信息,我将添加以下包含的 js 函数:

$(window).load(function () {
if($("#standard").length != 0) {        
    $("#standard").validate();
    $.metadata.setType("attr", "validate");
}
$("#standard").submit(function() {
    var tmpError = false;
    // Disability
    if($("input[name='disability']:checked").val() =="Yes") {
        if($("#disability-text").val() == "") {
            $("#disability-text-error").slideDown('fast');
            tmpError = true;
        } else {
            $("#disability-text-error").slideUp('fast');
            tmpError = false;
        }
    }
if(tmpError) { return false; }
});

上面的 .submit 函数中还有更多内容,但我正在查看的字段都没有包括在内。例如,在整个JS中,"文件"字段下方没有提到这一点:

                <tr><td><div class="field"><input type="file" size="33" name="file[]" validate="required:true" value="<?=$value['file']?>"><img src="../_images/icons/asterisk.gif" alt="Mandatory" style="margin-left: 10px" /><br />
                <label class="error" for="file[]">This field is required</label></div></td></tr>

编辑 我已将其缩小到以下内容:

现有的旧代码使用 jquery 脚本进行验证:

<script type="text/javascript" src="../_import/js/jquery.validate.js"></script>
<script type="text/javascript" src="../_import/js/jquery.metadata.js"></script>

为了向某些字段添加自动完成功能,我添加了:

<script type="text/javascript" src="../_import/js/jquery-1.9.0.js"></script>
<script type="text/javascript" src="../_import/js/jquery-ui-1.9.0.custom.js"></script>
<link rel="stylesheet" type="text/css" href="../_import/js/jquery-ui.css">

和 BAM,这破坏了一些东西 - 当我删除这些包含和我的自动完成功能时,我的新表单现在以相同的方式运行 - 即,它们不会刷新并且没有"?action=submit"添加到 URL。

有没有人经历过这场冲突?

有时程序员不想创建另一个文件来处理请求,所以他只是手动将此 GET 参数添加到表单目标并检查同一页面上的某个位置,如果设置了此参数,以便他知道表单已运行。