将字符串拆分为数组时出现JavaScript错误

时间:2015-04-09 17:21:50

标签: javascript html arrays string file

我遇到了将字符串拆分为数组的问题。为了帮助我解决问题,我包含了两个alert()函数,但只有一个被调用。因此,我知道将字符串拆分为数组存在问题(对于基本用户名/密码检查)。这是我的JS代码:

function check() {
var user = document.loginform.usr.value;
var pass = document.loginform.psw.value;
var valid = false;

var txt = new XMLHttpRequest();
var alltext = "";
var allLines = [];
var usrn = [];
var pswd = [];

txt.open("GET", "/c.txt", true);

alltext = txt.responseText;
allLines = alltext.split(/\r\n|\n/);

usrn = allLines[0].split(',');
alert("usrn split");
pswd = allLines[1].split(',');
alert("pswd split");

for (var i=0; i <usrn.length; i++) {
    if ((user == usrn[i]) && (pass == pswd[i])) {
        valid = true;
        break;
    }
}

if(valid) {
    window.location = "test.html";
    return false;
}else{
    var div = document.getElementById("login");
    div.innerHTML = '<font color="red" size=2><i>Invalid Username/Password!</i></font><br>' + div.innerHTML;
}

}

包含登录凭据(c.txt)的文件如下:

User1,User2
pass,password

当User1在表单中输入他/她的名字时,密码应为&#34;传递&#34;。但是,脚本会停在&#34; pswd = allLines [1] .split(&#39;,&#39;);&#34;。我误解了线阵吗?

感谢任何帮助 - 谢谢!

3 个答案:

答案 0 :(得分:0)

您需要通过将行更改为

来使用同步调用
txt.open("GET", "/c.txt", false);

或使用&#34; onreadystatechange&#34;在服务器返回时获取响应的事件

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    alltext = txt.responseText;
    allLines = alltext.split(/\r\n|\n/);

    usrn = allLines[0].split(',');
    alert("usrn split");
    pswd = allLines[1].split(',');
    alert("pswd split");

    for (var i=0; i <usrn.length; i++) {
        if ((user == usrn[i]) && (pass == pswd[i])) {
            valid = true;
            break;
        }
    }

    if(valid) {
        window.location = "test.html";
        return false;
    }else{
        var div = document.getElementById("login");
        div.innerHTML = '<font color="red" size=2><i>Invalid Username/Password!</i></font><br>' + div.innerHTML;
    }
    }
  }

答案 1 :(得分:0)

您需要致电txt.send()。它也是异步的,因此txt.responseText很可能是空的。

您可以像这样使用onreadystatechanged以确保txt.responseText具有值:

txt.onreadystatechange = function() {
    if (txt.readyState == 4) { // 4 = DONE
        alert(txt.responseText);
    }
}

答案 2 :(得分:0)

好的 - 在摆弄代码并进行更多研究之后,我得到了一个工作脚本。此脚本从表单中获取数据并根据文件(c.txt)进行检查。如果表单条目与c.txt中的用户名/密码组合匹配,则会将您带到另一个网页。

function check() {
var user = document.loginform.usr.value;
var pass = document.loginform.psw.value;
var valid = false;

var txt;

if(window.XMLHttpRequest){
     txt = new XMLHttpRequest();
}else{
    txt = new ActiveXObject("Microsoft.XMLHTTP");
}

var allLines = [];
var usrn = [];
var pswd = [];

txt.onreadystatechange=function() {
    if(txt.readyState==4 && txt.status==200){
        var alltext = txt.responseText;
        allLines = alltext.split(/\r\n|\n/);

        usrn = allLines[0].split(',');
        pswd = allLines[1].split(',');

        for (var i=0; i <usrn.length; i++) {
            if ((user == usrn[i]) && (pass == pswd[i])) {
                valid = true;
                break;
            }
        }

        if(valid) {
            window.location = "test.html";
            return false;
        }else{
            var div = document.getElementById("login");
            div.innerHTML = '<font color="red" size=2><i>Invalid Username/Password!</i></font><br>' + div.innerHTML;
        }
    }
}

txt.open("GET", "c.txt", false);
txt.send();

}