XML http响应不起作用

时间:2013-10-11 02:32:34

标签: javascript php validation xmlhttprequest

我为我的网站创建了一个程序,onkeyup验证用户名。它使用带有XMLHttpRequest的javascript。我不知道我的代码有什么问题。 js代码是:

    function search(username)
{
var xmlhttp, answer;
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
alert("Sorry, your browser seems to not support XMLHTTP functionality.");
}


xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4)
{
answer=xmlhttp.responseText;
if(compare_strings(answer,1))
{
document.getElementById("nameInfo").className="error";
document.getElementById("username").className="error";
document.getElementById("nameInfo").innerHTML="Please enter your desired username.";
}
else if(compare_strings(answer,2))
{
document.getElementById("nameInfo").className="error";
document.getElementById("username").className="error";
document.getElementById("nameInfo").innerHTML="The username <strong>"+username+"    </strong> is not allowed.";

}
else if(compare_strings(answer,3))
{
document.getElementById("nameInfo").className="error";
document.getElementById("username").className="error";
document.getElementById("nameInfo").innerHTML="The username <strong>"+username+"    </strong> has already been taken.";

}
else
{
document.getElementById("nameInfo").className="success";
document.getElementById("username").className="";
document.getElementById("nameInfo").innerHTML="Username <strong>"+username+"</strong>     is available.";
flag=1;

}
}
}
var url="ajax_search.php";
url=url+"?q="+username;
url=url+"&sid="+Math.random();
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
/*It has been assumed here that ajax_search.php is in the same directory.*/
xmlhttp.send(null);
}

我的PHP代码有效。当我加载网站并在.php后面放一个q?它回应了正确的答案。 无论如何这是代码:     

function chek_avail($username)
{
global $link;
$length=strlen($username);
if($length==0)
$res=1;
else if($length>5 && $length<15)
{
$res=4;
$query = "SELECT * FROM users";

if($result=$link->query($query)){
while($row=$result->fetch_assoc())
{
if(strcmp($username,$row['username'])==0)
$res=3;
}
}
}
else
$res=2;
echo $res;
}
$username=$_GET["q"];
chek_avail($username);
?>

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

啊,老派AJAX要求。他们带回了这样的......噩梦。 我可以建议使用jQuery吗? Get是一个非常方便的功能

jQuery().get('your URL here', function(answer) {
    if(compare_strings(answer,1))...
    // the rest of your code here
});

就是这样!您不再需要编写自己的AJAX了。适用于所有浏览器和不一致。说真的,没有人像你那样做了。

现在,关于你的PHP ...你正在获取整个users表,然后循环查找用户名?如何让你的数据库改变工作呢?

$query = "SELECT * FROM users WHERE username = (?)";
$stat = $link->prepare($query);
$stat->bind_param("s", $username);
$stat->execute();
$result = $stat->get_result();
$stat->close();

您可以从那里保留相同的代码,但您的数据库现在可以共享负载并告诉您$username是否在那里。这段代码是SQL注入安全的。更好的是,每次执行此操作时,您都不会遍历整个users表。