【问题标题】:How to find value (true or false) from AJAX response?如何从 AJAX 响应中找到值(真或假)?
【发布时间】:2013-08-08 22:03:58
【问题描述】:

我写了一个脚本注册用户。在最后一步中,我需要一个函数的值 true 或 false 来确定电子邮件是否已经存在。

function do_register(user_email){

    if (!isemailexist(user_email))  {
    document.getElementById("error").innerHTML="email is already exist, please change!!";
    document.regForm.user_email.focus()
    return false;
    } 

if (user_email=="") {
    document.getElementById("error").innerHTML="email is emphy!!";
    document.regForm.user_email.focus()
    return false;
    } 

if(document.regForm.user_name.value!=""){ process_register();} } 

function isemailexist ()

    xmlHttp.onreadystatechange=function () {

    if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){

    var str=xmlHttp.responseText;
    var res=JSON.parse(str);

    if (res[0]=="no"){  
    return false;
    }
    }
    haha=xmlHttp.onreadystatechange.test(res[0]); ///I used test(); methode  in order to find value true or false

    }

我尝试了很多,但没有一个能告诉我真假!

我已经更新了上面的脚本,希望它更好。更多代码:

PHP 代码

if(mysql_num_rows($result)>0){ //  email is already exist
     $phpArray = array("no","Erroremail is aleady exist");
     echo json_encode($phpArray);
 }

【问题讨论】:

  • 好的,当sql说这封邮件已经在数据库中时,我将结果分隔为2个字符串“no”和“Erroremail is aleady exist”,然后这将通过json返回对ajax的响应。之后,如果这可能是注册过程,我想获得一个真值或假值。换句话说,如果电子邮件已经存在,则无法注册用户。直到他填写数据库中不存在的电子邮件
  • 是的,过了一会儿我明白了。检查我的答案。您实际上并不需要 JSON,您只是在检查数据库,如果电子邮件已经存在,您只需将其返回 false。如果不是,则返回 true。

标签: javascript ajax boolean


【解决方案1】:

你做的事情有点太复杂了。当响应为 false 时,无需创建数组,因为您已经告诉用户该电子邮件已经存在。

而不是做

if(mysql_num_rows($result)>0){ //  email is already exist
     $phpArray = array("no","Erroremail is aleady exist");
     echo json_encode($phpArray);
}

只需在您的服务器端执行此操作即可。

if(mysql_num_rows($result)>0){ //  email is already exist
     return false;
}

由于您不再使用数组,因此您的响应会发生变化,您需要稍微调整一下代码。从res[0] 中删除[0]


那么你的服务器响应会是假的,所以改变

if (res[0]=="no"){  
    return false;
}

if (res==false){  
    return false;
}
else{
//continue...
}

【讨论】:

  • 是的,谢谢 Christian:我从没想过会这么容易。我做的太复杂了。我将 php 更改为 if(mysql_num_rows($result)>0){ return false; .但问题是解决了......干杯!!
  • @PoramatFin 在未来的项目中,尝试摆脱 mysql_() 扩展,而是应该在 mysql 连接上使用 PDO,因为它更安全,而且更多习惯后合乎逻辑。 SO 本身有一个很好的快速和肮脏的 PDO 参考,stackoverflow.com/tags/pdo/info。请记住,永远不要相信用户输入,始终验证它服务器端。这是一个示例,如果您不清理输入,可能会发生什么,将会发生什么。 littlebobbytables.com。很高兴我能帮上忙!
  • 谢谢克里斯蒂安,我以前没听说过这个……我会读的。听起来很有趣!
  • 嘿,克里斯蒂安...在我测试了很多次之后...这里似乎有问题:一开始,当我使用数据库中的相同电子邮件测试您的脚本时,我得到了我想要的结果...但是当我将另一封不在数据库中的电子邮件放入时...它返回相同的结果(错误)我现在该怎么办?
  • 您的 mysql 查询可能有问题。 @PoramatFin
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 2019-08-20
  • 2023-01-08
  • 2018-03-19
  • 2023-01-14
  • 2014-02-17
相关资源
最近更新 更多