如何使$ .get返回一个值

时间:2011-11-05 10:36:42

标签: javascript jquery ajax

我在JavaScript和jQuery中有这个代码,我需要修复它:

function valid_form() {
val_avail_email=valid_avail_email();

if (val_avail_email!="") {
$("#email_valid").html(val_avail_email);
return false;
}

return true;
}

function valid_avail_email() {
    var error="";

    $.get("valid_avail_email.php",{email:document.reg_form.email_reg.value},function(output) {
        error=output;
    });

    return error;
}

所以很明显我希望error变量包含valid_avail_email.php的输出,而不是让valid_avail_email()函数返回该值。

以下是valid_avail_email.php中的代码:

<?php
include("config.php");

$email=$_GET["email"];

$sql="select email from users";
$sql_query=mysql_query($sql);

if (!$sql_query) {
    echo mysql_error();
}

$res_assoc = mysql_fetch_assoc($sql_query);

foreach ($res_assoc as $field=>$value) {
   if ($value==$email) {
       echo "please use another email this one is taken ";
   }
}

?>  

2 个答案:

答案 0 :(得分:1)

问题是$ .get()函数启动异步ajax调用,意味着该函数在ajax调用仍在运行时返回。您必须从ajax回调函数中通知GUI,例如:

$.get("valid_avail_email.php",{email:document.reg_form.email_reg.value},function(output) {
  error=output;
  if (error !== '')
    alert('Sorry, use another email!');

});

答案 1 :(得分:0)

您不需要执行foreach循环来检查电子邮件是否在db中。只需执行以下查询:

SELECT email FROM users WHERE email = '$email'

并检查结果是否包含任何项目。这种方法比使用“foreach”循环枚举所有电子邮件更快,因为如果你有一个大的数据库,db会返回1或0结果而不是数千。

你的valid_avail_email()没关系..只要检查你的JS是否该函数返回任何内容,如果是,那么alert会显示错误:

var emailOk = valid_avail_email("blabla@email.com");
if(emailOk != ""){
//the following alert will show the error from php, it can show mysql_error() or "please use another email.." message
alert(emailOk);
//do stuff to abort the script
}