繁体   English   中英

我在AJAX中遇到了问题

[英]I have a problem in 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函数。

谢谢。

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

尝试做:

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);

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

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

另外,正如其他人指出的那样,您的正则表达式和字符串匹配可能需要稍作调整,但是根据问题来判断,这并不是您要问的。

我建议在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("...");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM