我遇到了将字符串拆分为数组的问题。为了帮助我解决问题,我包含了两个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;。我误解了线阵吗?
感谢任何帮助 - 谢谢!
答案 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();
}