我是一个有用的助手,可以将文本翻译成中文。
我加入了这个项目的中间部分,所以由于代码不规范,我需要重写一些代码。我正在使用 jQuery 1.6.1 和 Validate 1.8.1。
首先,这里是运行后端的 PHP 代码(dbquery.php):
我正在尝试使用jQuery验证脚本来实时查询数据库中是否存在已有用户名。我要么遇到永远无法工作的情况,要么就始终返回给定的用户名已被占用。
我认为问题在于我无法获取用户名变量的输入值。当我在
以下是我从在线资源重写并复制的jQuery代码:
我只是一个jQuery的初学者,但是正在使用这段代码。我是否走在正确的轨道上,或者应该在
我加入了这个项目的中间部分,所以由于代码不规范,我需要重写一些代码。我正在使用 jQuery 1.6.1 和 Validate 1.8.1。
首先,这里是运行后端的 PHP 代码(dbquery.php):
include("../includes/dbconnection.php");
session_start();
$location='';
$action='';
if($_GET['action']=='')
$action=$_POST['action'];
else
$action=$_GET['action'];
if($action=='checkusername'){
$error='';
$username=$_GET['username'];
// exclude denied account
$checkuserquery=mysql_query("Select * from database_users as user LEFT OUTER JOIN database_approval as approval on user.user_id=approval.approval_user_id where (approval.approval_status IS NULL or approval.approval_status <> 4) and user_username='".$username."'");
$checkuserresult=mysql_numrows($checkuserquery);
if($checkuserresult>0) {
$error = 'false';
} else {
$error = 'true';
}
echo $error;
}
我正在尝试使用jQuery验证脚本来实时查询数据库中是否存在已有用户名。我要么遇到永远无法工作的情况,要么就始终返回给定的用户名已被占用。
我认为问题在于我无法获取用户名变量的输入值。当我在
function(output)
中创建alert(username)
时,它什么也不返回。我的假设是.val()
仅在页面加载时起作用,因此由于某种原因,我在输入框中输入的任何内容都无法工作。以下是我从在线资源重写并复制的jQuery代码:
$(document).ready(function(){
$.validator.addMethod("checkAvailability",function(value,element){
var username = $("#username").val();
$.ajax({
url: "dbquery.php",
type: "GET",
async: false,
data: "action=checkusername&username="+username,
success: function(output) {
return output;
}
});
},"Sorry, this user name is not available");
// jQuery Validation script
$("#signup").validate( {
rules: {
username: {
required: true,
minlength: 5,
checkAvailability: true // remote check for duplicate username
},
},
messages: {
username: {
required: "Enter a username"
}
},
submitHandler: function(form) {
form.submit();
}
});
});
我只是一个jQuery的初学者,但是正在使用这段代码。我是否走在正确的轨道上,或者应该在
rules
和username
下使用remote:
?我被告知由于我试图验证输入值的动态性质,remote
方法将无法工作。
我遇到的另一个主要问题是,只有当数据库中已经存在用户名时,远程错误消息才会显示。不幸的是,它会出现无论dbquery.php返回true
还是false
。如果我尝试一个现有的用户名,它返回false
,然后我重写一个返回true
的新用户名,消息不会消失。同样地,当我写一个用户名并返回true
时,我仍然会收到远程错误消息。
原始编码者引用了getXMLHTTP
并使用了ActiveXObject
。他编程的方法似乎有点过时,所以我正在尝试使代码更加现代化并清理它。
5/25 - 我正在编辑此内容,包括旧的原始JavaScript代码,该代码可以正常工作,但使用了我想摆脱的过时方法(我已经删除了以下代码,并用上面的jQuery替换了它):
function getXMLHTTP() { //function to return the xml http object
var xmlhttp=false;
try{
xmlhttp=new XMLHttpRequest();
}
catch(e) {
try{
xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){
try{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e1){
xmlhttp=false;
}
}
}
return xmlhttp;
}
//validate username
function validateUsername(username){
var strURL="dbquery.php?action=checkusername&username="+username;
var req = getXMLHTTP();
if (req) {
req.onreadystatechange = function() {
if (req.readyState == 4) {
// only if "OK"
if (req.status == 200) {
if(req.responseText=='notavailable'){
document.getElementById("errorusername").style.display="block";
document.getElementById("errorusername").innerHTML="<div id=\"errors\"><strong>"+username+"</strong> is already taken by another user.</div>";
error = true;
}
else{
error = false;
document.getElementById("errorusername").style.display="none";
}
} else {
alert("There was a problem while using XMLHTTP:\n" + req.statusText);
}
}
}
req.open("GET", strURL, true);
req.send(null);
}
}
true
还是false
,都会不断地返回抱歉,此用户名不可用
。我希望它只在返回false
时显示,并在返回true
时消失。 - micahtrue
而不是"true"
吗?通常情况下,Firebug在记录字符串时不会添加引号,我可以确定alert也不会。尝试使用我发布的这一行代码:return output === "true" ? true : false;
- Halcyon