【问题标题】:Continue in javascript after php returns true or falsephp返回true或false后在javascript中继续
【发布时间】:2020-09-25 04:42:35
【问题描述】:

我需要一些帮助。我尝试进行注册,因为我只需要刷新页面上的注册部分,我必须使用 ajax。这就是问题所在。当我提交表单时,ajax 会加载不同的文件,php 中的注册部分在哪里。在 php 中,我有一些变量,如果出现错误,我用它们来更改特定输入的颜色。但是,因为 php 在其他文件中,所以我无法从 ajax 所在的文件中访问变量并更改颜色。如果我尝试在 php 所在的文件中放置更改颜色的脚本,它不会执行,因为我在某个地方停止了 php,例如“return false”。

你知道吗,我能用这个做什么?非常感谢你,对不起我的英语不好。

这是ajax部分

<script>

        $(document).ready(function(){

            $("#registerUser").submit(function(event){
                event.preventDefault();
                var typedEmail = $("#registerEmail").val(),
                typedPassword = $("#registerPassword").val(),
                typedRepeatedPassword = $("#registerRepeatedPassword").val();
                submittedForm = $("#registerSubmit").val();

                $("#registerMessage").load("accountRegistration.php", {
                    email: typedEmail,
                    password: typedPassword,
                    repeatedPassword: typedRepeatedPassword,
                    submit: submittedForm
                });

            });

        });

    </script>

这是php文件

if(isset($_POST["submit"])){
    require_once "autoload.php";

    $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
    $password = $_POST["password"];
    $repeatedPassword = $_POST["repeatedPassword"];
    $emailError = false;
    $passwordError = false;
    $repeatedPasswordError = false;

    if(empty($email)){
      $emailError = true;
    }

    if(empty($password)){
      $passwordError = true;
    }

    if(empty($repeatedPassword)){
      $repeatedPasswordError = true;
    }

    if(strlen($password) < 8){
      $passwordError = true;
    }

    if($password != $repeatedPassword){
      $repeatedPasswordError = true;
    }

    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
      $emailError = true;
    }

    if($emailError == true || $passwordError == true || $repeatedPasswordError == true){
      echo("<span class='errorMessage'>Vyplňte správně všechna políčka!</span>");
      return false;
    }

    $registration = new DatabaseOperations;
    if($registration->selectOneRow("users", "userID", "email", $email, PDO::PARAM_STR)){
      echo("<span class='errorMessage'>Tento email už někdo používá.</span>");
      return false;
    }

    $passwordHash = password_hash($password, PASSWORD_DEFAULT);
    if($registration->insertOneRow("users", array("email", "password"), array($email, $passwordHash))){
      echo("<span class='successMessage'>Registrace proběhla úspěšně.</span>");
      return true;
    } else{
      echo("<span class='errorMessage'>Něco se pokazilo. Zkuste to prosím znovu.</span>");
      return false;
    }



  } else{
    echo ("Stala se chyba. Zkuste to prosím znovu.");
  }

<script>

$("#registerEmail, #registerPassword, #registerRepeatedPassword").removeClass("inputError");

var emailError = "<?php echo(isset($emailError) ? $emailError : '') ?>";
var passwordError = "<?php echo(isset($registerPassword) ? $registerPassword : '') ?>";
var repeatedPasswordError = "<?php echo(isset($registerRepeatedPassword) ? $registerRepeatedPassword : '') ?>";
console.log(emailError);
console.log(passwordError);
console.log(repeatedPasswordError);

if(emailError == true){
  $("#registerEmail").addClass("inputError");
}

if(passwordError == true){
  $("#registerPassword").addClass("inputError");
}

if(repeatedPasswordError == true){
  $("#registerRepeatedPassword").addClass("inputError");
}

if(passwordError == true || repeatedPasswordError == true){
  $("#registerPassword").val("");
  $("#registerRepeatedPassword").val("");
}

</script>

这里是 HTML

<div class="signUp">
            <h1>registrace</h1>
            <form method='POST' name="register" id="registerUser">
                <p id="registerMessage"></p>
                <input type='email' id='registerEmail' name='email' placeholder='Váš email'>
                <input type='password' id='registerPassword' name='password' placeholder='Vaše heslo (min. 8 znaků)'>
                <input type='password' id='registerRepeatedPassword' name='repeatedPassword' placeholder='Ověření hesla'>
                <input type='submit' id='registerSubmit' name='' value='REGISTROVAT'>
            </form>
            <p>MÁM ÚČET A&nbsp;<a href="#null"  class="changeForm">CHCI SE PŘIHLÁSIT</a><p>
        </div>

【问题讨论】:

  • 你得到什么回应?您的 ajax 调用返回什么,任何错误响应?
  • 当我将 function(response){console.log(response);} 添加到 ajax 中时,它只显示 from echo in php。 A 尝试更改例如 return false 以返回 $emailError,但没有发生任何事情。
  • 你必须尝试$.ajax函数和html dataType
  • 我可以尝试不同的方法,但我不知道哪种方法安全等等。

标签: php jquery ajax post return


【解决方案1】:

带有 html 的 Ajax 也是如此。它只返回“echo”中的内容

$.ajax({
                    method: "POST",
                    url: "accountRegistration.php",
                    data: {
                        email: typedEmail,
                        password: typedPassword,
                        repeatedPassword: typedRepeatedPassword,
                        submit: submittedForm
                    },
                    dataType: "html",
                    success: function(errors){
                        console.log("Errors: " + errors);
                    }
                })

【讨论】:

    【解决方案2】:

    最后,我是这样做的..

    <script>
    
            $(document).ready(function(){
    
                $("#registerUser").submit(function(event){
                    event.preventDefault();
                    var typedEmail = $("#registerEmail").val(),
                    typedPassword = $("#registerPassword").val(),
                    typedRepeatedPassword = $("#registerRepeatedPassword").val();
                    submittedForm = $("#registerSubmit").val();
    
                    $.ajax({
                        method: "POST",
                        url: "accountRegistration.php",
                        data: {
                            email: typedEmail,
                            password: typedPassword,
                            repeatedPassword: typedRepeatedPassword,
                            submit: submittedForm
                        },
                        dataType: "json",
                        success: function(results){
    
                            $("#registerMessage").html(results["message"]);
    
                            $("#registerEmail, #registerPassword, #registerRepeatedPassword").removeClass("inputError");
    
                            var emailError = results["emailError"];
                            var passwordError = results["passwordError"];
                            var repeatedPasswordError = results["repeatedPasswordError"];
    
                            if(emailError == true){
                              $("#registerEmail").addClass("inputError");
                            }
    
                            if(passwordError == true){
                              $("#registerPassword").addClass("inputError");
                            }
    
                            if(repeatedPasswordError == true){
                              $("#registerRepeatedPassword").addClass("inputError");
                            }
    
                            if(passwordError == true || repeatedPasswordError == true){
                              $("#registerPassword").val("");
                              $("#registerRepeatedPassword").val("");
                            }
    
                        }
                    });
    
                });
    
            });
    
        </script>
    
    
    
    
    <?php
      if(isset($_POST["submit"])){
        registerUser();
      }
    
      function registerUser(){
        require_once "autoload.php";
    
        $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
        $password = $_POST["password"];
        $repeatedPassword = $_POST["repeatedPassword"];
        $emailError = false;
        $passwordError = false;
        $repeatedPasswordError = false;
    
        if(empty($email)){
          $emailError = true;
        }
    
        if(empty($password)){
          $passwordError = true;
        }
    
        if(empty($repeatedPassword)){
          $repeatedPasswordError = true;
        }
    
        if(strlen($password) < 8){
          $passwordError = true;
        }
    
        if($password != $repeatedPassword){
          $repeatedPasswordError = true;
        }
    
        if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
          $emailError = true;
        }
    
        if($emailError == true || $passwordError == true || $repeatedPasswordError == true){
          echo (json_encode(
            array("emailError" => $emailError,
             "passwordError" => $passwordError,
             "repeatedPasswordError" => $repeatedPasswordError,
             "message" => "<span class='errorMessage'>Vyplňte správně všechna políčka!</span>"
            )));
          return false;
        }
    
        $registration = new DatabaseOperations;
        if($registration->selectOneRow("users", "userID", "email", $email, PDO::PARAM_STR)){
          echo(json_encode(array("message" => "<span class='errorMessage'>Tento email už někdo používá.</span>")));
          return false;
        }
    
        $passwordHash = password_hash($password, PASSWORD_DEFAULT);
        if($registration->insertOneRow("users", array("email", "password"), array($email, $passwordHash))){
          echo(json_encode(array("message" => "<span class='successMessage'>Registrace proběhla úspěšně.</span>")));
          return true;
        } else{
          echo(json_encode(array("message" => "<span class='errorMessage'>Něco se pokazilo. Zkuste to prosím znovu.</span>")));
          return false;
        }
    
      }
    
     ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      相关资源
      最近更新 更多