我用这个脚本来检查电子邮件是否使用ajax在DB中注册。问题是:它只是检查一次,如果用户插入一个注册的电子邮件,然后插入另一个电子邮件checkemail.php中的变量不会改变。
<script type="text/javascript">
$(document).ready(function() {
var x_timer;
$("#email").keyup(function (e){
clearTimeout(x_timer);
var email = $(this).val();
x_timer = setTimeout(function(){
check_username_ajax(email);
}, 600);
});
function check_username_ajax(email){
$.post('checkemail.php', {'email':email}, function(data) {
$("#user-result").html(data);
});
}
});
</script>
<input type="email" name="email" id="email" placeholder="E-mail" /><span id="user-result"></span>
checkemail.php
<?php
require'conexao.php';
$email = mysql_real_escape_string($_POST['email']);
$SQL = "SELECT email FROM clients WHERE email = '" . $email . "'";
$check = @mysql_query($SQL) or die("Erro no banco de dados!");
$result = @mysql_num_rows($check);
if($result){
$emailstate = "1";
echo '<script type="text/javascript">alert("O E-mail informado já está cadastrado.");</script>
<input type="radio" id="emailstate" name="emailstate" value="<?php echo $emailstate; ?>" style="display:none;" checked>';
} else {
$emailstate = "0";
echo '<input type="radio" id="emailstate" name="emailstate" value="<?php echo $emailstate; ?>" style="display:none;" checked>';
}
?>
有人能帮我一下吗? 你的问题显示的代码没有多大意义,即不清楚你到底想要实现什么,但这将使你走上正确的轨道。
checkemail.php
<?php
if (!empty($_POST['email'])) {
// Lookup
$email = $_POST['email'];
$sql = "SELECT email, username FROM clients WHERE email = '" . mysql_real_escape_string($email) . "' LIMIT 1";
$result = mysql_query($sql);
// Format the response package and send back to calling .js function
$response = new stdClass();
if (!$result) {
$response->error = "Could not successfully run query ($sql) from DB: " . mysql_error();
exit;
} else {
$row = mysql_fetch_assoc($result);
if ($response->exists = mysql_num_rows($result)) {
// If account exists, get username and add to response data
$response->username = $row['username'];
}
}
echo json_encode($response);
exit;
}
?>
客户端html/js:
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#email").blur(function (e) {
var email = $(this).val();
check_username_ajax(email);
});
function check_username_ajax(email) {
$.post('checkemail.php', {'email': email}, function (data) {
//uncomment the line below to inspect the response in js console/firebug etc
//console.log(data);
if (data.hasOwnProperty('error')) {
$("#user-result").html(data.error);
} else {
if (data.exists == '1') {
$("#user-result").html('Account exists, username is: ' + data.username);
} else {
$("#user-result").html('Account does not exist');
}
}
}, "json");
}
});
</script>
<div>
<input type="email" name="email" id="email" placeholder="E-mail" />
<span id="user-result"></span>
</div>
你可以像这样添加其他属性到PHP响应对象:$response->username
,然后访问js ajax/post响应中的变量:data.username
.
正如其他评论者所说,使用任意延迟来放松'setTimeout',它并不真正适用于这里,也许您会发现onBlur更合适,或者可能包装成一个完整的形式-因为它不清楚您的预期用途是什么。
checkemail.php
<?php
require'conexao.php';
$sql = "SELECT email FROM clients WHERE email = '" . mysql_real_escape_string($email) . "' LIMIT 1";
$echk=mysql_query($sql);
$ecount=mysql_num_rows($echk);
if($ecount!=0)
{
$emailstate = "1";
echo '<script type="text/javascript">alert("O E-mail informado já está cadastrado.");</script>
<input type="radio" id="emailstate" name="emailstate" value="<?php echo $emailstate; ?>" style="display:none;" checked>';
} else {
$emailstate = "0";
echo '<input type="radio" id="emailstate" name="emailstate" value="<?php echo $emailstate; ?>" style="display:none;" checked>';
}
?>
js
<script type="text/javascript">
function checkMailStatus(){
var email=$("#email").val();
$.ajax({
type:'post',
url:'checkemail.php',
data:{email: email},
success:function(msg){
$("#user-result").html(msg);
}
});
}
</script>
html <input type="email" name="email" id="email" placeholder="E-mail" onblur="checkMailStatus()"/><span id="user-result"></span>