javascript - 需要帮助通过 javascript 中的数组验证用户名和密码

标签 javascript xml

大家好
我问的问题主要是关于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>

最佳答案

好的,首先。 您应该提到这是一项作业,而不是现实世界的应用程序。 呵呵。

好吧,你的问题很简单,在 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;

    }

关于javascript - 需要帮助通过 javascript 中的数组验证用户名和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5643976/

相关文章:

javascript - JSON 对象转换中的嵌套数组

javascript - 如何在 JavaScript 中单击 'EDIT' 按钮时使用特定数据预填充表单? (不使用任何数据库)

android - 按钮单击每颗 dentry ...制作适用于所有屏幕分辨率的布局

java - 获取 XSD 验证失败的元素的对象

javascript - 你什么时候会在对象上使用 ES6 映射?

javascript - Meteor 检索嵌套数组

javascript - jquery .replace(/./g, "") 对我不起作用,但对其他人不起作用

java - xpath 第一个可用值

xml - 如何使用VBScript对XML中的节点进行分组

java - 丢弃服务器 XML 响应中返回的不可打印字符