大家好 我问的问题主要是关于Javascript。首先,我对技术术语不是很了解,所以如果我不清楚,请耐心等待 无论如何,我的目标是验证登录过程,用户名和密码,其中两个参数都存在于数组中,该数组由XML文件填充。基本上,该数组包含来自XML文件和用户名&的信息。密码也在该数组中。为了让用户登录,输入的用户名和密码必须在数组中,否则会返回错误消息。我的问题是,我不确定在表示数组中的索引时我想要使用哪种语法,而且我不确定我使用的语法是否正确。我所知道的是它验证了阵列中的第一个用户名和密码。 XML文件,但即使它是正确的,其他所有内容都被视为不正确。
这是我的Javascript文件:
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
//DEFINE LOAD METHOD
function LoadXML(xmlFile)
{
xmlDoc.load(xmlFile);
xmlObj = xmlDoc.documentElement;
}
//declare & initialize array
var arrPerson = new Array()
//initialize array w/ xml
function initialize_array()
{
LoadXML("PersonXML.xml");
var x = 0;
while (x < xmlObj.childNodes.length)
{
var tmpArr = new Array(xmlObj.childNodes(x).getAttribute("Usrname"),
xmlObj.childNodes(x).getAttribute("Pswd"),
xmlObj.childNodes(x).getAttribute("FirstName"),
xmlObj.childNodes(x).getAttribute("LastName"),
xmlObj.childNodes(x).getAttribute("DOB"),
xmlObj.childNodes(x).getAttribute("Gender"),
xmlObj.childNodes(x).getAttribute("Title"));
arrPerson.push(tmpArr);
x++;
}
}
//Validation
function LogInVal(objtxt)
{
if(objtxt.value.length == 0)
{
objtxt.style.background = "red";
return 1;
}
else
{
objtxt.style.background = "white";
return 0;
}
}
//main validation
function MainVal(objForm)
{
var errmsg = "empty field";
var errmsg2 = "Incorrect Username and Password";
var msg = "You have logged in successfully";
var errCount = 0;
var usrname1 = document.getElementById("usrname1").value;
var pswd1 = document.getElementById("pswd1").value;
errCount += LogInVal(objForm.usrname);
errCount += LogInVal(objForm.pswd);
if (errCount != 0)
{
alert(errmsg);
return false;
}
else
{
initialize_array();
for (x = 0; x < arrPerson.length; x++)
{
if (arrPerson[x][0] == usrname1 && pswd1 == arrPerson[x][1]) //I think my problem is within here
{
alert(msg);
return true;
}
else
{
alert(errmsg2);
return false;
}
}
}
}
这是我的XML文件:
<?xml version ="1.0" encoding="utf-8" ?>
<!--GGFGFGFVBFVVVHVBV-->
<PersonInfo>
<Person Usrname="Bob111" Pswd="Smith111" personid="111" FirstName="Bob" LastName="Smith" DOB="01/01/1960" Gender="M" Title="Hello1">
</Person>
<Person Usrname="Joe222" Pswd="Johnson222" personid="222" FirstName="Joe" LastName="Johnson" DOB="12/01/1980" Gender="M" Title="Hello2">
</Person>
<Person Usrname="Tracey333" Pswd="Wilson333" personid="333" FirstName="Tracey" LastName="Wilson" DOB="12/01/1985" Gender="F" Title="Hello3">
</Person>
<Person Usrname="Connie444" Pswd="Yuiy444" personid="444" FirstName="Connie" LastName="Yuiy" DOB="12/01/1985" Gender="F" Title="Hello4">
</Person>
<Person Usrname="Brian555" Pswd="Dame555" personid="555" FirstName="Brian" LastName="Dame" DOB="12/01/1985" Gender="M" Title="Hello5">
</Person>
<Person Usrname="Scott666" Pswd="Bikes666" personid="666" FirstName="Scott" LastName="Bikes" DOB="12/01/1985" Gender="MF" Title="Hello6">
</Person>
</PersonInfo>
答案 0 :(得分:1)
您是否在浏览器上进行登录验证?如果是这样,这不是一个好主意,因为一个精明的用户可以使用像Firebug或Fiddler这样的东西,只要在将它们传输到浏览器时看到用户名和密码。
您需要在服务器上进行登录验证。
答案 1 :(得分:1)
好的,首先。 你应该提到这是一个任务,而不是一个真实世界的应用程序。 和合。
好的,你的问题很简单,你的if语句的两个分支都是RETURN,它在第一次迭代时有效地离开了函数。只有在验证名称或者您的人员用完时才会返回。
PS:很好地学习这种模式是个好主意。它在一般的编程中使用很多
else
{
initialize_array();
for (x = 0; x < arrPerson.length; x++)
{
if (arrPerson[x][0] == usrname1 && pswd1 == arrPerson[x][1]) // This is fine
{
alert(msg);
return true;
}
// We must not do this if we still have work to do.
//else
//{
// alert(errmsg2);
// return false;
//}
}
// Moved to outside the loop. IE: We have no one else to validate
// therefore the username and password combo is invalid.
alert(errmsg2);
return false;
}