Facebook注册异步用户名验证

时间:2012-10-05 11:47:55

标签: php asp.net facebook validation registration

首先,我到处寻找答案,并没有遇到过,如果我错过了某个地方,请原谅我!

我正在尝试在提交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);
?>

1 个答案:

答案 0 :(得分:0)

首先,请查看异步验证的文档https://developers.facebook.com/docs/plugins/registration/advanced/#async

基本上,您的客户端验证函数返回null(或根本没有返回语句) - 然后您在回调函数中评估服务器端脚本的响应。

你是如何做到的,取决于你。

最好的情况是,如果服务器端脚本返回JSON,并在出现错误时给出错误值。然后在客户端回调函数中评估该JSON数据对象。