【发布时间】:2021-08-07 10:29:29
【问题描述】:
我有一个表单,我正在使用jquery.ajax 在后台运行PHP 代码。问题是当我收到脚本的响应时,我的Javascript 代码并不能很好地处理它。
如果我使用 if (status == "success") 它可以工作(但这不是处理此操作的正确方法),但如果我使用 if (response == "allok"),它不会工作并且提交表单停止工作。 (no messages in Console)
使用alert 或echo,我可以看到“response”的正确值,但由于某种原因,如果我在if 中使用此值,整个script 将停止运行。这是为什么呢?
HTML 代码:
<form id="form" class="registrazione" action="ajax/verifica.php" method="POST">
<input type="text" id="username" name="username" class="username" placeholder="Nome utente..." autocomplete="off" autofocus>
<input type="text" id="email" name="email" class="email" placeholder="Email..." autocomplete="off">
<input type="password" id="password" name="password" class="password" placeholder="Password..." autocomplete="off">
<input type="password" id="conferma_password" name="conferma_password" class="password" placeholder="Riscrivi la password..." autocomplete="off">
<p id="risultato"></p>
<input type="submit" id="form_button" name="form_button" class="form_button" value="Continua">
</form>
JS代码:
$(document).ready(function() {
$("#form").submit(function(event) {
event.preventDefault();
var username=$("#username").val();
var email=$("#email").val();
var password=$("#password").val();
var conferma_password=$("#conferma_password").val();
var submit=$("#form_button").val();
$.ajax({
url: "ajax/verifica.php",
method: "POST",
data: {
username: username,
email: email,
password: password,
conferma_password: conferma_password,
submit: submit
},
dataType: "text",
success: function(response,status){
if (response == "allok") {
$("#risultato").html('Risposta='+risposta+' Status='+status);
// alert('Account creato!');
}
if (status == "error") {
alert("Ops! Si è verificato un errore interno momentaneo. Riprova più tardi, grazie.");
}
},
error: function() {
alert("Ops! Generic error.");
}
})
})
});
PHP 代码:
if (isset($_POST['submit'])) {
$username=$_POST['username'];
$email=$_POST['email'];
$password=$_POST['password'];
$conferma_password=$_POST['conferma_password'];
$errorMessage=false;
$errorUsername=false;
$errorEmail=false;
$errorPassword=false;
$errorConfermaPassword=false;
$username_regex="/^[a-z0-9._-]{2,35}$/i";
$password_regex="/^(?=.*\d.*\d)[0-9A-Za-z!@#$%*]{8,}$/";
if (empty($username)) {
echo "Write a username.";
$errorUsername=true;
$errorMessage=true;
}
if (empty($email)) {
echo "Write a email.";
$errorEmail=true;
$errorMessage=true;
}
if (empty($password)) {
echo "Write a password.";
$errorPassword=true;
$errorMessage=true;
}
if (empty($conferma_password)) {
echo "Password check again.";
$errorConfermaPassword=true;
$errorMessage=true;
}
if ($password!=$conferma_password) {
echo "Password check.";
$errorPassword=true;
$errorMessage=true;
}
if (!preg_match($username_regex, $username)) {
echo "Not a valid username.";
$errorUsername=true;
$errorMessage=true;
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Not a valid email address.";
$errorEmail=true;
$errorMessage=true;
}
if (!preg_match($password_regex, $password)) {
echo "Not a valid password.";
$errorPassword=true;
$errorMessage=true;
}
$query="SELECT id,nome,cognome FROM test WHERE username='$username'";
$result=mysqli_query($connessione, $query);
if ($result->num_rows > 0) {
echo "Username not available.";
$errorUsername=true;
$errorMessage=true;
}
if ($errorMessage==false) {
echo "allok";
}
}
else {
echo "Generic error.";
}
【问题讨论】:
-
我已经使用了带有 json、html、text 的 dataType 但它不起作用。
-
响应如何。也许您可以检查实际响应的内容。因此,console.log(响应)。
-
您显示的代码没有明显问题,但我猜输出周围有空格(这就是为什么将输出编码为 JSON 然后在客户端解析它是好方法:除了允许更复杂的数据结构外,它还规范了空白)。
-
旁注:在您的成功处理程序中,您将接收参数命名为
response,但随后您尝试在.html()中使用risposta。 -
@El_Vanja 你是对的。发表这篇文章,我只是忘了把“risposta”翻译成“response”。