如何解决无法运行响应
我有一个表单,我正在使用 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.";
}
解决方法
您只是将一个字符串回显到您的 AJAX 脚本中。 它正在接收以下字符串之一:
- 输入用户名
- 写一封电子邮件
- 输入密码
- (等你所有的回声)
这些都将直接返回到 AJAX 脚本的成功处理程序,但在该处理程序中,您需要两个参数。这些将由您从 PHP 脚本回显的任何内容填充,在您的情况下是上述之一。
此外,在这种情况下,第二个参数是“状态”,如果 AJAX 调用被引导到“成功”处理程序,那么它应该总是“成功”。因此,永远不会到达您的“成功”处理程序中有关“错误”的 if 语句。
您可能想在 PHP 文件中尝试以下操作:
$response = new StdClass;
$response->status = 'success';
$response->message = <any of the above statements>;
$response = json_encode($response);
echo $response;
然后在您的 AJAX 脚本中,您可以使用以下内容:
success: function(response){
if (response.status == "allok") {
$("#risultato").html('Risposta='+risposta+' Status='+status);
//alert('Account creato!');
}
if (response.status == "error") {
alert("Ops! Si è verificato un errore interno momentaneo. Riprova più tardi,grazie.");
}
此外,我不鼓励在您的代码中使用除英语之外的任何其他语言。混淆意大利语和英语变量名会使您的代码更难阅读。我在经验不足的程序员编写的代码中经常遇到这种情况。
,对于未来的读者,PHP 文件中有一段 JS 代码,它会自动包含在响应字符串中。所以这就是问题所在。我修复了它,删除了 JS 代码并将其发布在正确的位置(例如在 HTML 代码中)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。