我目前正在尝试创建动态注册页面。通过动态,我只是意味着将根据数据库检查输入的用户名和电子邮件,看它们是否存在。我想这样做而不重定向到另一个页面,所以ajax与jquery是我最好的镜头。
我的系统就是这样;
ERROR_USER_EXISTS
ERROR_EMAIL_EXISTS
USER_ADD_SUCCESS
,并完成注册我正在通过'ClickUpvote'查看this example answer并尝试扩展,但我遇到了一些麻烦。在我的注册页面上,我有一个表单,为了简单起见,我已经用该答案中提供的链接替换了“提交”按钮。这是我对脚本进行的简单扩展;
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript">
function makeAjaxRequest()
{
var url="./DoRegister.php";
$.get(url,{},verifyDb);
}
function verifyDb(response)
{
if (response=="ERROR_EMAIL_EXISTS")
{
document.write('Email in use');
}
else if (response=="ERROR_USER_EXISTS")
{
document.write('Username in use');
}
else if (response=="USER_ADD_SUCCESS")
{
document.write('Registration success');
}
}
</script>
<?PHP
echo '<form class="" method="post" action="./DoRegister.php">';
echo '<div>'.EditBox('username','Username', False, True, True).'</div>';
echo '<div>'.EditBox('password','Password', True, False, True) .'</div>';
echo '<div>'.EditBox('email','Email Address', False, False, True, 'email') .'</div>';
echo '<a href="#" onclick="makeAjaxRequest();">Check database</a>';
echo '</form>';
echo '</div></div>';
?>
注意: EditBox()
只是根据提供给它的参数返回预先格式化的HTML输入框。它只是让我更容易维护代码。
文件DoRegister
与运行此脚本的目录位于同一目录中,如下所示;
<?PHP
define("base_path", dirname(__FILE__).'/');
include base_path.'/core/CMS_Functions.php';
$_pagearray = _registerUser($_POST['username'],$_POST['password'],$_POST['email']);
if($_pagearray['msg'] == 'ERROR_EMAIL_EXISTS'){
$msg = 'That email address is already in use. Please enter another.';
}
if($_pagearray['msg'] == 'ERROR_USER_EXISTS'){
$msg = 'That username is already in use. Please enter another.';
}
if($_pagearray['msg'] == 'USER_ADD_SUCCESS'){
$msg = 'Thankyou for registering <strong>'.$_pagearray['username'].'</strong>!<br>'.'Please click the activation link sent to your email address in order to activate your account.';
}
return $msg;
?>
注意: _registerUser()
只接受注册帐户所需的3个参数,并返回上述状态字符串之一。它接受的参数不需要来自POST
。
我的问题是,当我在字段中输入详细信息后点击链接时,“没有任何反应”。我想这是由于实际上没有通过POST提交的形式,因此DoRegister
实际上从未看到过这些值。这是我第一次进入javascript,ajax或jquery,所以这不是我觉得我可以自己解决的问题(我倾向于发现过去几年我学到的所有语言都是从尽管如此简单。)
如何扩展/修复脚本以便我可以执行“动态”查找?
答案 0 :(得分:2)
您需要获取要在javascript中发送的帖子数据,
javascript不是我的专家领域,但让我们看看我是否能做到这一点......
$("#yourForm").submit(function() {
$.ajax({
type: "POST",
url: "DoRegister.php",
data: "name=" + $("#name").val() + "&mail=" + $("#mail").val() + "&pw=" + $("#pw").val(),
success: verifyDb
});
});
使用您的表单:
<form action="" id="yourForm" mehod="post">
<input type="text" id="name" name="name" />
<br />
<input type="text" id="mail" name="mail" />
<br />
<input type="password" id="password" name="password" />
<br />
<input type="submit" value="Submit" />
</form>
应该工作,但我还没有测试过这个......