2017-03-21 76 views
0

我有一个表单,应该在提交按钮后提交数据。根据需要标记几个输入字段后,如果在按下提交按钮后在所需字段中没有任何输入,表单总是显示给我 - 到目前为止,这很好。成功提交表单后重定向

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

现在我有以下代码:

提交按钮:

<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”页面,无论所有必填字段是否完整。

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

+1

您当前的代码不提交* *的形式,它使没有首先做任何验证一个Ajax请求。你为什么不做一个标准的(非Ajax)表单提交,然后在你的PHP中处理重定向? – nnnnnn

+0

您可以更改您的事件侦听器来侦听表单的submit,然后在您的HTML元素上使用'required'属性....如果您将eventlistener更改为event_prevent();您将需要添加'event.preventDefault听表单提交以防止表单执行默认操作'post',因此可能用表单标签包装表单... – NewToJS

+0

谢谢。我如何在没有Ajax的情况下执行代码?和ajax做不同的是什么? –

回答

1

你应该绑定到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元素触发。

+0

谢谢。所以要绑定提交事件,我需要将选择器从'#submityes'更改为其他内容?不幸的是,我不确定在那里写什么表达。 –

+0

哦,我想我明白了。我给了表单名称/ id“webform”,并且我在方括号中写了'#webform'而不是'#submityes'。现在我还有一个小问题:表单有两个不同的提交按钮('#submityes'和'#submitno')。两者都应该将用户重定向到不同的页面。我如何在代码中实现这一点?它应该是类似于“如果#webform'通过'#submityes'重定向到X,如果通过'#submitno'重定向到Y' –

+0

@TimKühn提交,请参阅我的更新回答? –

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"); 
      } 
     }); 
    }); 
}); 
+0

如果表单未成功验证,则OP不需要任何重定向(如在必填字段为空的情况下不重定向)。 – nnnnnn

+0

也许我的误解......但无论如何,首先我们必须验证 - 在提交之前,然后通过ajax发送请求,并在收到响应时检查是否所有进程都成功。然后,如果一切正常,完全我们必须重定向用户。我对吗? –

0

我假设你在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?

希望这可以对您有所帮助。

0

你可以做最简单的事情就是添加属性“需要”给你输入elements.Example:

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

这是一个HTML5特性,所以不需要的JavaScript。它受到所有主流浏览器的支持。检查此链接:

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

无论如何,你不应该依赖只是前端验证。检查后端的输入。

+0

但是如果表单从后端角度来看是无效的 –

+0

这是另外一个问题 –

0
<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"); 
     } 
    }); 
}); 
+0

非常感谢。函数isValid()是后端验证吗?我想我需要检查每个需要的变量是否为这个函数? –

+0

你可以做它在前端以及后端 –

+0

你可以在for循环中使用form.elemets来验证表单中的每个元素 –