我是一个很长一段时间的潜伏者,这是我的第一篇文章,所以对我很轻松......
所以我对Javascript很新,我最终会去jQuery,但现在我仍然坚持常规的Javascript。
我已经用PHP创建了一个网站,现在我正尝试设置一些客户端验证。
因此,在对这些论坛进行了一些研究之后,我发现由于它的异步特性,获取responseText并不容易。所以我调查了回拨,但我在设置它们时遇到了很多麻烦。我设法设置了它,但它不断返回整个html页面,而不仅仅是回显的字符串。
function checkName(usernameString, callback) {
//
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","checkName.php?q="+usernameString,true);
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
//document.getElementById("uMess").innerHTML=xmlhttp.responseText;
callback(xmlhttp.responseText);
}
}
//xmlhttp.open("GET","checkName.php?q="+usernameString,true);
xmlhttp.send();
}
function validateUsername(usernameString) {
var valid = true;
checkName(usernameString,function(err,response){
if (err) {
alert('Error: ' + err);
} else {
alert('Response: ' + response);
}
});
.....
有人会介意指出我遇到灾难性的错误吗?在此先感谢你们:)
此处还有用于检查是否使用用户名的PHP文件
<?php
include_once 'header.php';
$userName = $_GET['q'];
if ( strlen($userName) < 6 ){
$response = "Too Short!";
echo $response;
}
else{
$query = "SELECT user FROM temporaryusers WHERE user='$userName'";
$result = mysql_query($query);
if(mysql_num_rows($result))
{
$response="Taken";
echo $response;
}
else{
$response="Available";
echo $response;
}
}
?>
答案 0 :(得分:2)
您通过以下方式拨回电话:
callback(xmlhttp.responseText);
^^^^^^^^^^^^^^^^^^^^--- one parameter
但该功能定义为
checkName(usernameString,function(err,response){
^^^^^^^^^^^--- two params
所以你的responsetext实际上进入了err
变量。您只需从PHP脚本中传回一个字符串,因此err
始终设置为true。