我在AJAX中遇到了问题

时间:2010-12-18 15:03:58

标签: php javascript ajax

我的部分验证码存在问题。在这里。

function isEmailValid(email) {
    if( email  == "") {
        document.getElementById("emailMsg").innerHTML="<font color=red>Email cannot be empty</font>";  
    }
    else { 
        var emailRegexStr = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; 
        if (!emailRegexStr.test(email)) { 
            document.getElementById("emailMsg").innerHTML="<font color=red>Invalid email</font>";   
        }
        else {
            xmlhttp = getHTTPObject();
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
                    document.getElementById("emailMsg").innerHTML = xmlhttp.responseText; 
                    if(xmlhttp.responseText == "<font color=green>Correct !</font>" ) {
                        return true;
                    }
                    else {
                        return false;
                    }      
                }
            }

            xmlhttp.open("GET","includes/register_function.php?email="+email,true);   
            xmlhttp.send();
        }
    }
}

以上代码的以下部分无法正常工作。

if (xmlhttp.responseText == "<font color=green>Correct !</font>") {
    return true;
}
else {
    return false;
}

可能是一个愚蠢的错误我是PHP + AJAX的新手。

这是相关的PHP代码

if (isset($_GET['email'])) {    
    $email=$_GET['email'];   

    if (!isUserExistsByEmail($email)) {
        echo "<font color=green>Correct !</font>";  
    } else {
        echo "<font color=red>Email already exisits</font>";    
    }    
}

这里是gethttpobject函数

function getHTTPObject(){

if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");

else if (window.XMLHttpRequest) return new XMLHttpRequest();

else {

    alert("Browser does not support AJAX.");

return null;

} 

}

我需要知道如何为同步场景更改getHTTPObject函数。

感谢。

3 个答案:

答案 0 :(得分:1)

您依赖于字符串匹配任意字符串 - 这通常容易出错。很可能在回复中有一个尾随回车

尝试做:

alert('[' + xmlhttp.responseText +']');

代替你的if语句。

如果提醒值不是完全

[<font color=green>Correct !</font>]
那时你遇到了问题。我怀疑你会得到:

[<font color=green>Correct !</font>
]

或类似 - 在这种情况下,您需要根据需要修改if语句。

更好,更不脆弱的方法是这样的:

if(xmlhttp.responseText.indexof("Correct")>=0) {
    return true;
} else {
    return true;
}

甚至更好:

return (xmlhttp.responseText.indexof("Correct")>=0);

答案 1 :(得分:1)

您希望isEmailValid()返回true还是false?因为它的编写方式不会返回任何内容。在 isValidEmail()内定义的嵌套函数返回truefalse,但在isValidEmail()执行完成后的某个时间将异步调用。它不会被你的代码调用。它会被浏览器调用,因此您可能永远无法检查返回值以检查它是true还是false

更改代码以实现isValidEmail()返回truefalse的目标的一种方法是使XMLHttpRequest调用同步,而不是异步(SJAX而不是(AJAX)。那样isValidEmail()将阻塞,直到它从服务器收到响应(或超时)。当然,您的用户在等待他们的电子邮件地址被验证时将无法在页面上执行任何操作。这可能是也可能是不可接受的。

此外,正如其他人所指出的那样,你的正则表达式和字符串匹配可能需要稍微调整一下,但从问题来判断,这并不是你要问的具体内容。

答案 2 :(得分:0)

我建议在PHP和javascript中使用更好的东西。比如,PHP脚本可以用XML或JSON输出结果。客户端的Javascript会根据格式解析字符串。

我建议您查看以下链接: 对于JSON(我个人更喜欢JSON到XML,有些方面JSON比XML好得多)

对于XML,只需谷歌,我相信你会得到很多结果。

例如: 用PHP:

$obj['result'] = 1;
$obj['color'] = 'green';
echo json_encode($obj);

在Javascript中:

try{
    var result = JSON.parse(xmlhttp.responseText);
}catch(err){
    alert("...");
}