【问题标题】:Redirection after successful form submit表单提交成功后重定向
【发布时间】:2017-08-13 03:51:25
【问题描述】:

我有一个表单,它应该在按下提交按钮后提交数据。根据需要标记几个输入字段后,当按下提交按钮后,在必填字段中没有输入时,表单总是显示我 - 到目前为止,一切都很好。

我想知道的是,如果提交成功,则会重定向到另一个页面。如果有一些空的必填字段,表单应该显示给我,而不会将我重定向到另一个页面。

现在我有以下代码:

提交按钮:

<div class="form-group">
     <div class="col-sm-offset-2 col-sm-10">
    <button type="submit" name="submityes" id="submityes" class="btn btn-danger">Submit</button>
      </div>
  </div>

我还有以下 js 函数来提交表单并将我重定向到另一个页面:

$('document').ready(function () {
    "use strict";
    $(function () {
        $('#submityes').click(function () {
            $.ajax({
                type: "POST",
                /* url: "process.php", //process to mail
                data: $('form.contact').serialize(), */
                success: function (msg) {
                    window.location.replace("/submit_resolved.php");
                },
                error: function () {
                    alert("error");
                }
            });
        });
    });
});

我现在遇到的问题是,无论所有必填字段是否完整,我都会被重定向到“submit_resolved.php”页面。

我该如何解决这个问题?我只想在所有必填字段都不为空时被重定向。

【问题讨论】:

  • 您当前的代码没有提交 form,它在没有首先进行任何验证的情况下发出 Ajax 请求。为什么不直接提交一个标准(非 Ajax)表单,然后在 PHP 中处理重定向?
  • 您可以更改您的事件侦听器以侦听表单的submit,然后在您的HTML 元素上使用required 属性...。如果您更改了event.preventDefault();,您将需要添加eventlistener 监听表单提交以防止表单执行默认操作post 所以可能用表单标签包装表单....
  • 谢谢。如何在没有 ajax 的情况下编写代码?使用 ajax 和不使用 ajax 有什么区别?

标签: javascript php jquery html forms


【解决方案1】:

完成时进行重定向。不是成功

$('document').ready(function () {
    "use strict";
    $(function () {
        $('#submityes').click(function () {
            $.ajax({
                type: "POST",
                /* url: "process.php", //process to mail
                data: $('form.contact').serialize(), */
                success: function (msg) {
                    //window.location.replace("/submit_resolved.php");
                },
                complete: function () {
                    window.location.replace("/submit_resolved.php");
                },
                error: function () {
                    alert("error");
                }
            });
        });
    });
});

【讨论】:

  • 如果表单验证失败,OP 不希望进行任何重定向(例如,如果必填字段留空,则不进行重定向)。
  • 也许我的误解......但无论如何,首先我们必须验证 - 在提交之前,然后通过 ajax 发送请求,并在收到响应时 - 检查是否一切正常并处理成功。然后如果一切正常,我们必须重定向用户。我说的对吗?
【解决方案2】:

您应该绑定到submit 事件,而不是click 事件:

更新以匹配评论

$(function () {

    var submityesClicked;

    //catch the click to buttons
    $('#submityes').click(function () {
        submityesClicked = true;
    });
    $('#submitno').click(function () {
        submityesClicked = false;
    });

    $('#webform').submit(function (e) {
        e.preventDefault();//prevent the default action

        $.ajax({
            type: "POST",
            /*url: "process.php", //process to mail
             data: $('form.contact').serialize(),*/
            success: function (msg) {
                window.location.replace(submityesClicked ? "/submit_resolved_yes.php" : "/submit_resolved_no.php");
            },
            error: function () {
                alert("error");
            }
        });
    });
});

submit 事件仅在表单有效时触发。

注意submit 事件是由表单触发的,而click 事件是由input 元素触发的。

【讨论】:

  • 谢谢。因此,要绑定提交事件,我需要将选择器从“#submityes”更改为其他内容?不幸的是,我不确定在其中写哪个表达式。
  • 哦,我想我明白了。我将表单名称/ID 命名为“webform”,并在括号中写了“#webform”而不是“#submityes”。现在我还有一个小问题:表单有两个不同的提交按钮('#submityes' 和'#submitno')。两者都应该将用户重定向到不同的页面。如何在代码中实现这一点?它应该类似于“如果'#webform'通过'#submityes'重定向到X提交,如果它通过'#submitno'重定向到Y提交'
  • 我不明白为什么要使用 preventDefault()?因此,我的表格没有发送到我的电子邮件。但是没有 preventDefault() 我的表单被发送并且我的重定向也可以工作。那么拥有它有什么用呢?
  • 如果您不阻止表单的默认行为,那么它将被发送两次,第一次是在 AJAX 调用中,第二次是用户按下提交按钮时的默认行为。
【解决方案3】:

我假设您正在验证 process.php 中的表单,所以如果像这样从 process.php 验证失败,您必须返回错误。

header('HTTP/1.1 500 Internal Server Booboo');
header('Content-Type: application/json; charset=UTF-8');
die(json_encode(array('message' => 'ERROR', 'code' => 1337)));

查看此链接:Return errors from PHP run via. AJAX?

希望这对你有帮助。

【讨论】:

    【解决方案4】:

    您可以做的最简单的事情是为您的输入元素添加“必需”属性。示例:

    <form action="/action_page.php">
      Username: <input type="text" name="usrname" required>
      <input type="submit">
    </form> 
    

    这是一个 HTML5 属性,因此不需要 JavaScript。所有主流浏览器都支持它。检查此链接:

    http://caniuse.com/#search=required

    无论如何,您不应该只依赖前端验证。也在后端检查这些输入。

    【讨论】:

    • 但是如果表单从后端的角度来看是无效的怎么办?
    • 那是另一个问题
    【解决方案5】:
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="form-group">
         <div class="col-sm-offset-2 col-sm-10">
            <form action="">
               Username: <input type="text" id="usrname" required>
              <button type="button" name="submityes" 
               id="submityes" class="btn btn-danger">Submit</button>
           </form> 
      </div>
    

    function isValid(){
      var usrname = $("#usrname").val();
        if(usrname == ""){
          return false;
        }
      return true;
    }
    $(function () {
        $('#submityes').submit(function () {
        if(isValid() == true){
            $.ajax({
                type: "POST",
               /*url: "process.php", //process to mail
                data: $('form.contact').serialize(),*/
                success: function (msg) {
                    alert("success");
                    window.location.replace("/submit_resolved.php");
                },
            });
            }else{
            alert("error");
            }
        });
    });
    

    【讨论】:

    • 非常感谢。函数 isValid() 是后端验证吗?我想我需要检查这个函数的每个必需变量?
    • 你可以在前端和后端做到这一点
    • 你可以在 for 循环中使用 form.elemets 来验证表单中的每个元素
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多