XML http 响应不起作用


XML http response doesn't work

>我为我的网站创建了一个程序,该程序onkeyup验证用户名。它使用javascript和XMLHttpRequest。我不知道我的代码出了什么问题。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);
?>

感谢您的帮助!

啊,老式的 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表。