当用户提交表单时,我试图向服务器发送AJAX请求,我这样做是为了检查该电子邮件是否已经被其他人使用,或者它是否是新的。
这是我的javascript AJAX函数
function check_entireform()
{
var new_email = document.getElementById('jemail').value;
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var y =xmlhttp.responseText;
if(y=="user with that email is already registered")
return false;
}
}
var x ="user_exists.php?email="+ new_email;
xmlhttp.open("GET",x,true);
xmlhttp.send();
}
这是我的html输入标签
<form method="post" action="./new.php" onsubmit="return check_entireform()">
<input type="text" name="email" id="jemail"/>
</form>
这是我的user_exists.php文件
<?php
$email=$_GET["email"];
if(mysql_query("SELECT email FROM user_info WHERE email='$email'"))
echo "user with that email is already registered";
else
echo"user got a new email";
?>
当用户提交表单时,我希望通过AJAX将用户电子邮件发送到user_exists.php文件,然后检查该电子邮件是否已经被人使用,并在已经使用的情况下回显一些信息。
我不知道哪里出了问题。我一直在提交相同的电子邮件,但它没有回音,也没有阻止我提交表格。
如果有更好的解决方案来找出是否有人已经在使用电子邮件,那就是great.Thanks
发布于 2012-01-17 00:25:51
AJAX中的第一个A是用于异步的.
这意味着回调函数(您为onreadystatechange
定义的回调函数)只有在服务器响应时才会运行。另一方面,您的submit
处理程序check_entireform
将返回更早的时间。它返回undefined
,它的计算结果为false
,因此没有提交表单。
无论您想做什么,都应该在回调函数中这样做。
始终防止提交,并将引用传递给表单:
<form method="post" action="./new.php" onsubmit="check_entireform(this); return false;">
接受以下参考:
function check_entireform(theform) {
如有需要,请提交表格:
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var y =xmlhttp.responseText;
if(y != "user with that email is already registered")
theform.submit();
}
jsFiddle演示 -没有AJAX,只有模拟
从PHP中返回更符合逻辑的内容
提示:不是从PHP返回长字符串,而是只返回0或1。您应该将AJAX查询看作是--在这种情况下没有问题(可以使用这封电子邮件吗?)1表示是,0表示不。
这样您就可以将代码更改为:
var canBeUsed =xmlhttp.responseText;
if (canBeUsed) theform.submit();
它将变得更容易阅读和维护。
URL-编码查询字符串参数值
在这一行:
var x ="user_exists.php?email="+ new_email;
您应该对new_email
变量进行URL编码,因为某些字符(如&
)在查询字符串中具有特殊的含义,并将被编码。您可以使用encodeURIComponent()函数来完成以下操作:
var x ="user_exists.php?email="+ encodeURIComponent(new_email);
清理PHP中的输入
总是对来自外部的任何数据进行清理(并验证)。在当前的形式中,您的代码容易受到SQL注入的攻击,这是的一个巨大的问题。
在向查询中插入数据之前,应该在查询上使用mysql_real_escape_string()
(或者更好的是,使用http://php.net/manual/en/book.pdo.php处理数据库内容)。
$email = mysql_real_escape_string($_GET["email"]);
if(mysql_query("SELECT email FROM user_info WHERE email='$email'"))
https://stackoverflow.com/questions/8891451
复制相似问题