在我的网站主页上,我有一个新的用户注册表。它包含一个字段“用户名”。当用户输入用户名并将焦点指向另一个字段时,将执行AJAX代码,检查是否已存在输入用户名的用户。
我正在使用的AJAX代码是:
function toggle_username(userid) {
if (window.XMLHttpRequest) {
http = new XMLHttpRequest();
} else if (window.ActiveXObject) {
http = new ActiveXObject("Microsoft.XMLHTTP");
}
handle = document.getElementById(userid);
var url = 'ajax.php?';
if(handle.value.length > 0) {
var fullurl = url + 'do=check_username_exists&username=' + encodeURIComponent(handle.value);
http.open("GET", fullurl, true);
http.send(null);
http.onreadystatechange = statechange_username;
}
else
{
document.getElementById('username_exists').innerHTML = '';
}
}
上面代码调用的文件“AJAX.PHP”是这样的:
<?php
mysql_connect ('localhost', 'MyServer', 'user1');
mysql_select_db('globaldb');
$do = $_GET['do'];
switch($do) {
case 'check_username_exists':
if(get_magic_quotes_gpc()) {
$username = $_GET['username'];
}else{
$username = addslashes($_GET['username']);
}
$count = mysql_num_rows(mysql_query("SELECT * FROM `student_login` WHERE `username`='".$username."'"));
header('Content-Type: text/xml');
header('Pragma: no-cache');
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<result>';
if($count > 0) {
$_SESSION['UserExists'] = "true";
}else{
$_SESSION['UserExists'] = "false";
}
$_SESSION['UserExists'] = "false";
echo '</result>';
break;
default:
echo 'Error, invalid action';
break;
}
?>
在我的注册表单中,在用户名输入框的下方,我想定义一个部分,我可以在其中显示消息:
具有此名称的用户存在,或
用户名可用。
在我的主页中,我使用以下代码:
<input name="username" type="text" id="username" onchange="toggle_username('username')" style="width:150px;" maxlength="40" size="22" >
<?PHP
if ($_SESSION['UserExists'] == "true")
{
echo "<div id='username_exists' style='font-size: 11px;font-weight: bold;color:red'>User with this name unavailable.</div>";
}
else
{
echo "<div id='username_exists' style='font-size: 11px;font-weight: bold;color:darkgreen'> User with this name is available </div>";
}
?>
主页包含上面的代码和我给出的第一个代码块(JavaScript)。
此代码无效。我想原因是我已经将消息包含在PHP块中。作为服务器端,它没有显示消息。
请告诉我如何处理此问题。是否修改调用AJAX的JavaScript代码或在PHP中包含某些内容。
请注意,实际上我想要的是以绿色或红色显示消息。如果用户名可用,则绿色为红色。
答案 0 :(得分:1)
我使用jQuery执行此操作并让PHP页面返回代码(0表示false,1表示true)或类似代码。然后,您可以使用jQuery的addClass()方法,具体取决于返回的结果,所有这些都在javascript中。
答案 1 :(得分:0)
如果让ajax.php返回一些预先格式化的HTML并使用你设置为处理响应的statechange_username
函数,将其粘贴在占位符div / span中?
顺便问一下,为什么要设置会话变量?
答案 2 :(得分:0)
我猜你错过了statechange_username函数,比如
function statechange_username()
{
if (http.readyState==4)
{
document.getElementById(\"username_eixsts\").innerHTML=http.responseText;
}
}