首先,我到处寻找答案,并没有遇到过,如果我错过了某个地方,请原谅我!
我正在尝试在提交Facebook注册表单之前检查用户名是否存在。 即使验证尚未完成,似乎注册仍可继续!有没有办法在所有验证完成之前停止提交表单?
许多答案链接到一个显然解决了这个问题的帖子,但实际上重要的部分却缺失了。这个答案的帖子是Here。
缺少“Test02.aspx”的内容,这就是我被困住的地方。
facebook部分:
<fb:registration
redirect-uri="read.php/tools/echo"
fields="[{'name':'name'},{'name':'email'},{'name':'username','description':'Username','type':'text'},{'name':'password'}]"
onvalidate="validate_async">
</fb:registration>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script>
function validate_async(form, cb) {
$.getJSON('test02.aspx?username=' + form.username + '?callback=?',
function(response) {
if (response.error) {
// Username isn't taken, let the form submit
cb();
}
cb({username: 'That username is taken'});
});
}
</script>
我不知道的是放在test02.aspx中的内容。我宁愿使用php来检查数据库,但我无法理解它!
任何帮助将不胜感激!
提前谢谢你 米什卡
的 - 更新 -
客户端的一些更改:
<script>
function validate(form, cb) {
$.getJSON('PHP/fb_check_user.php?username=' + form.username,
function(data){
$.each(data,function(name,error){
if (error === 'true')
{
cb({username: 'That username is taken'});
}
else
{
cb();
}
});
}
);
};
</script>
为了让它发挥作用,我不得不改变这一行:
$.getJSON('PHP/fb_check_user.php?username=' + form.username + '?callback=?',
为:
$.getJSON('PHP/fb_check_user.php?username=' + form.username,
服务器端:(fb_check_user.php)
<?php
//Connect to database
$user=$_GET['username'];
$query = mysql_query("SELECT usr FROM members WHERE usr = '$user'");
if (!mysql_num_rows($query))
{
$result = array('error' => 'false');
}
else
{
$result = array('error' => 'true');
}
echo json_encode($result);
?>
答案 0 :(得分:0)
首先,请查看异步验证的文档https://developers.facebook.com/docs/plugins/registration/advanced/#async
基本上,您的客户端验证函数返回null(或根本没有返回语句) - 然后您在回调函数中评估服务器端脚本的响应。
你是如何做到的,取决于你。
最好的情况是,如果服务器端脚本返回JSON,并在出现错误时给出错误值。然后在客户端回调函数中评估该JSON数据对象。