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



我的PHP代码工作正常,直到我决定使用jquery为我的注册页面来处理和检查字段,它正在工作没有错误,一切都正确提交到服务器,所以代码PHP和jquery都没有问题,但是header("location:../****.php"( 在我点击提交后不再将我发送到另一个页面,而是在不刷新的情况下将新页面加载到旧页面之上。 这是我注册页面的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>

我该如何解决这个问题?

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

当上面的代码到达标头("位置:文件.php"(; 它会将该文件提取到$(".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";
}
});

希望这个答案有帮助。

您的代码完全按照应有的方式运行。

$(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((;

最新更新