当我在提交时使用event.preventDefault()时,PHP标头重定向不再工作

时间:2017-07-15 21:50:07

标签: javascript php jquery ajax

我的PHP代码工作正常,直到我决定使用jquery为我的注册页面来处理和检查字段,它的工作没有错误,所有内容都正确地提交给服务器所以PHP代码没有问题也没有问题jquery,但是在我点击提交后,标题(“location:../。VSp”)不再将我发送到另一个页面,而是在没有刷新的情况下将新页面加载到旧页面之上。 这是我的注册页面的jquery代码:

<script>
 $(document).ready(function() {
     $("#myForm").submit(function(event){
         event.preventDefault();
      var username = $("#signup-username").val();
      var pwd = $("#signup-pwd").val();
   $(".form-message").load("includes/user-signup.inc.php",{
      username: username,
      pwd: pwd
     });
     });
     });
</script>

这是我的包含页面中的PHP代码:

<?php
if (isset($_POST['submit'])){
include_once 'dbh.inc.php';
$username= mysqli_real_escape_string($conn, $_POST['username']);
$pwd = mysqli_real_escape_string($conn, $_POST['pwd']);
$errorEmpty = $errorValid = false;
if(empty($username)|| empty($pwd)){
    echo "Fill in all Fields!";
    $errorEmpty = true;
}
else{
        $stmt = $conn->prepare("SELECT * FROM users WHERE username=?");
        $stmt->bind_param("s", $uid);
        $uid = $username;
        $stmt->execute();
        $result = $stmt->get_result();
        $usernamecheck = mysqli_num_rows($result); // check if the results
        $rowNum = $result->num_rows;
        if($rowNum > 0){
            echo "Username is taken!";
            $errorValid = true;
}
else{
    $hashedPwd = password_hash($pwd, PASSWORD_DEFAULT);
    $stmt = $conn->prepare("INSERT INTO users (username, pwd) VALUES (?, ?)");
    $stmt->bind_param("ss",$uid, $password);
    $uid = $username;
    $password = $hashedPwd;
    $stmt->execute();
    $result = $stmt->get_result();
    header("location: ../user-login.php");
}
}
}else{
header("location: ../user-signup.php");
exit();
}
?>
<script> 
$("#signup-username, #signup-pwd").removeClass("input-error");
    var errorEmpty = "<?php echo $errorEmpty; ?>";
    var errorValid = "<?php echo $errorValid; ?>";
if (errorEmpty == true $$ errorValid == true){
    $("#signup-username, #signup-pwd").addClass("input-error");
if (errorFEmpty == false && errorValid == false){
$("#signup-username, #signup-pwd,").val("");
    }
</script>

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您的代码完全按照预期运行。

 $(document).ready(function() {
     $("#myForm").submit(function(event){
         // THIS LINE RIGHT HERE
         event.preventDefault();
      ******************
        $(".form-message").load("includes/user-signup.inc.php",{
      ******************
        });
     });
  });

事件阻止默认值会停止重定向操作。此外,然后使用jquery将文件的内容加载到DOM元素中,类为:

.form-message

删除event.preventDefault();

答案 1 :(得分:0)

$(".form-message").load("includes/user-signup.inc.php",{
  username: username,
  pwd: pwd
});

当上面的代码到达标题的位置时(&#34;位置:file.php&#34;); 它会将该文件提取到$(".form-message") 要避免这种情况,您可以使用ajax发布数据和javascript内置重定向

$.ajax({
  type: "POST",
  url: "includes/user-signup.inc.php",
  data: "username="+ username +"&pwd="+ pwd,
  success: function(data) {
    window.location.href = "../****.php";
  }
});

希望这个答案很有帮助。