2011-05-24 64 views
0

過去4小時以來一直拉我的頭髮。我有兩個Javascript文件,兩者本身都很完美。一個用作登錄驗證,另一個用我的註冊頁面並將表單寫入XML文件。需要幫助調試一個Javascript代碼和/或讓它工作

當我從登錄JS獲取一些代碼並將其放入我的註冊JS中時,我的註冊JS甚至不能正常工作。我想我的問題可能是我的代碼的位置。

如果我在這裏發佈完整的代碼,後會是什麼樣10英尺長,所以這裏是我的所有文件: http://www.mediafire.com/?wt9bchq35pdqxgf

順便說一句,這是不是一個真實的世界應用程序,它只是一些我這樣做。

下面是註冊頁面我原來的JavaScript文件:

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
var fso = new ActiveXObject("Scripting.FileSystemObject"); 
var FILENAME = 'C:\\Users\\Wilson Wong\\Desktop\\Copy of Take Home Exam - Copy\\PersonXML2.xml'; 

function SaveXML(UserData) 
{ 


var file = fso.CreateTextFile(FILENAME, true); 


file.WriteLine('<?xml version="1.0" encoding="utf-8"?>\n'); 
file.WriteLine('<PersonInfo>\n'); 

for (countr = 0; countr < UserData.length; countr++) 
{ 
    file.Write(' <Person '); 
    file.Write('Usrname="' + UserData[countr][0] + '" '); 
    file.Write('Pswd="' + UserData[countr][1] + '" '); 
    file.Write('PersonID="' + UserData[countr][2] + '" '); 
    file.Write('FirstName="' + UserData[countr][3] + '" '); 
    file.Write('LastName="' + UserData[countr][4] + '" '); 
    file.Write('Gender="' + UserData[countr][5] + '" '); 
    file.Write('DOB="' + UserData[countr][6] + '" '); 
    file.Write('Title="' + UserData[countr][7] + '" '); 
    file.WriteLine('></Person>\n'); 
} // end for countr 
//file.WriteLine('></Person>\n'); 

var usrn = document.getElementById("Usrn").value; 
var pswd = document.getElementById("Pswd").value; 
var pid = document.getElementById("PersonID").value; 
var fname = document.getElementById("FirstName").value; 
var lname = document.getElementById("LastName").value; 
var gender = document.getElementById("Gender").value; 
var dob = document.getElementById("DOB").value; 
var title = document.getElementById("Title").value; 

file.Write(' <Person '); 
file.Write('Usrname="' + usrn + '" '); 
file.Write('Pswd="' + pswd + '" '); 
file.Write('PersonID="' + pid + '" '); 
file.Write('FirstName="' + fname + '" '); 
file.Write('LastName="' + lname + '" '); 
file.Write('Gender="' + gender + '" '); 
file.Write('DOB="' + dob + '" '); 
file.Write('Title="' + title + '" '); 
file.WriteLine('></Person>\n');  

file.WriteLine('</PersonInfo>\n'); 
file.Close(); 
} // end SaveXML function -------------------- 

function LoadXML(xmlFile) 
{ 
xmlDoc.load(xmlFile); 
return xmlDoc.documentElement; 
} //end function LoadXML() 

function initialize_array() 
{ 
var person = new Array(); 
var noFile = true; 
var xmlObj; 
if (fso.FileExists(FILENAME)) 
{ 
    xmlObj = LoadXML(FILENAME); 
    noFile = false; 
} // if 
else 
{ 
    xmlObj = LoadXML("PersonXML.xml"); 
    //alert("local" + xmlObj); 
} // end if 

var usrCount = 0; 
while (usrCount < xmlObj.childNodes.length) 
{ 
    var tmpUsrs = new Array(xmlObj.childNodes(usrCount).getAttribute("Usrname"), 
          xmlObj.childNodes(usrCount).getAttribute("Pswd"), 
          xmlObj.childNodes(usrCount).getAttribute("PersonID"), 
          xmlObj.childNodes(usrCount).getAttribute("FirstName"), 
          xmlObj.childNodes(usrCount).getAttribute("LastName"), 
          xmlObj.childNodes(usrCount).getAttribute("Gender"), 
          xmlObj.childNodes(usrCount).getAttribute("DOB"), 
          xmlObj.childNodes(usrCount).getAttribute("Title")); 
    person.push(tmpUsrs); 
    usrCount++; 
} //end while 
if (noFile == false) 
    fso.DeleteFile(FILENAME); 
SaveXML(person); 
} // end function initialize_array() 

這裏這段代碼將寫信給我的XML文件,我點擊提交按鈕後。這是XML的樣子:

<?xml version="1.0" encoding="utf-8"?> 

<PersonInfo> 

<Person Usrname="Bob111" Pswd="Smith111" PersonID="111" FirstName="Bob" LastName="Smith" Gender="M" DOB="01/01/1960" Title="Hello1" ></Person> 

<Person Usrname="Joe222" Pswd="Johnson222" PersonID="222" FirstName="Joe" LastName="Johnson" Gender="M" DOB="12/01/1980" Title="Hello2" ></Person> 

<Person Usrname="Tracey333" Pswd="Wilson333" PersonID="333" FirstName="Tracey" LastName="Wilson" Gender="F" DOB="12/01/1985" Title="Hello3" ></Person> 

<Person Usrname="Connie444" Pswd="Yuiy444" PersonID="444" FirstName="Connie" LastName="Yuiy" Gender="F" DOB="12/01/1985" Title="Hello4" ></Person> 

<Person Usrname="Brian555" Pswd="Dame555" PersonID="555" FirstName="Brian" LastName="Dame" Gender="M" DOB="12/01/1985" Title="Hello5" ></Person> 

<Person Usrname="Scott666" Pswd="Bikes666" PersonID="666" FirstName="Scott" LastName="Bikes" Gender="MF" DOB="12/01/1985" Title="Hello6" ></Person> 

<Person Usrname="sadsa" Pswd="s" PersonID="s" FirstName="s" LastName="s" Gender="s" DOB="s" Title="s" ></Person> 

如果我修改我的代碼是什麼如下圖所示,XML文件甚至不會創造。身份驗證也不會正常運行。如在框中不會變成紅色並且沒有警報消息彈出。但是我添加的代碼在我的其他JS文件中可以用於我的登錄頁面。

下面是編輯註冊JS:

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
var fso = new ActiveXObject("Scripting.FileSystemObject"); 
var FILENAME = 'C:\\Users\\Wilson Wong\\Desktop\\Copy of Take Home Exam - Copy\\PersonXML2.xml';   
function SaveXML(UserData) 
    { 
var file = fso.CreateTextFile(FILENAME, true); 

file.WriteLine('<?xml version="1.0" encoding="utf-8"?>\n'); 
file.WriteLine('<PersonInfo>\n'); 

for (countr = 0; countr < UserData.length; countr++) 
{ 
    file.Write(' <Person '); 
    file.Write('Usrname="' + UserData[countr][0] + '" '); 
    file.Write('Pswd="' + UserData[countr][1] + '" '); 
    file.Write('PersonID="' + UserData[countr][2] + '" '); 
    file.Write('FirstName="' + UserData[countr][3] + '" '); 
    file.Write('LastName="' + UserData[countr][4] + '" '); 
    file.Write('Gender="' + UserData[countr][5] + '" '); 
    file.Write('DOB="' + UserData[countr][6] + '" '); 
    file.Write('Title="' + UserData[countr][7] + '" '); 
    file.WriteLine('></Person>\n'); 
} // end for countr 

var usrn = document.getElementById("Usrn").value; 
var pswd = document.getElementById("Pswd").value; 
var pid = document.getElementById("PersonID").value; 
var fname = document.getElementById("FirstName").value; 
var lname = document.getElementById("LastName").value; 
var gender = document.getElementById("Gender").value; 
var dob = document.getElementById("DOB").value; 
var title = document.getElementById("Title").value; 

var errmsg = "empty field"; 
var errmsg2 = "You have register successfully"; 
var msg = "This user name is already in use";   //this is what I added 
var errCount = 0; 

errCount += LogInVal(usrn); 
errCount += LogInVal(pswd); 
errCount += LogInVal(pid); 
errCount += LogInVal(fname); 
errCount += LogInVal(lname);  //this is what I added 
errCount += LogInVal(gender); 
errCount += LogInVal(dob); 
errCount += LogInVal(title); 

if (errCount != 0)      //the if/else statements are what I added 
{ 
    file.WriteLine('</PersonInfo>\n');  //checks to see if textbox is empty, if yes, alert 
    file.Close(); 
    alert(errmsg); 
    return false; 
} 

else if(authentication(usrn) == true) 
{ 
    file.WriteLine('</PersonInfo>\n');  //checks to see if user name entered is already in use 
    file.Close(); 
    alert(msg); 
    return false;  
} 

else 
{ 
    file.Write(' <Person '); 
    file.Write('Usrname="' + usrn + '" '); 
    file.Write('Pswd="' + pswd + '" '); 
    file.Write('PersonID="' + pid + '" '); 
    file.Write('FirstName="' + fname + '" '); 
    file.Write('LastName="' + lname + '" ');  //this block of code here was there originally 
    file.Write('Gender="' + gender + '" '); 
    file.Write('DOB="' + dob + '" ');    //previous two condition is false, registration successful, writes to XML. 
    file.Write('Title="' + title + '" '); 
    file.WriteLine('></Person>\n');  

    file.WriteLine('</PersonInfo>\n'); 
    file.Close(); 

    alert(errmsg2); 
    return true; 
} 
    } // end SaveXML function -------------------- 

    function authentication(usrname1)   //function was added 
{ 
for (var x = 0; x < arrPerson.length; x++) 
{ 
    if (arrPerson[x][0] == usrn) 
     { 
      return true; 
     }  
} 
return false;  
} 

    function LogInVal(objtxt)    //function was added 
    { 
     if(objtxt.value.length == 0) 
{ 
    objtxt.style.background = "red"; 
    return 1; 
} 

else 
{ 
    objtxt.style.background = "white"; 
    return 0; 
} 
    } 

function LoadXML(xmlFile) 
{ 
xmlDoc.load(xmlFile); 
return xmlDoc.documentElement; 
} //end function LoadXML() 

function initialize_array() 
{ 
var person = new Array(); 
var noFile = true; 
var xmlObj; 
if (fso.FileExists(FILENAME)) 
{ 
    xmlObj = LoadXML(FILENAME); 
    noFile = false; 
} // if 
else 
{ 
    xmlObj = LoadXML("PersonXML.xml"); 
    //alert("local" + xmlObj); 
} // end if 

var usrCount = 0; 
while (usrCount < xmlObj.childNodes.length) 
{ 
    var tmpUsrs = new Array(xmlObj.childNodes(usrCount).getAttribute("Usrname"), 
          xmlObj.childNodes(usrCount).getAttribute("Pswd"), 
          xmlObj.childNodes(usrCount).getAttribute("PersonID"), 
          xmlObj.childNodes(usrCount).getAttribute("FirstName"), 
          xmlObj.childNodes(usrCount).getAttribute("LastName"), 
          xmlObj.childNodes(usrCount).getAttribute("Gender"), 
          xmlObj.childNodes(usrCount).getAttribute("DOB"), 
          xmlObj.childNodes(usrCount).getAttribute("Title")); 
    person.push(tmpUsrs); 
    usrCount++; 
} //end while 
if (noFile == false) 
    fso.DeleteFile(FILENAME); 
SaveXML(person); 
} // end function initialize_array() 

這裏的登錄頁面JS,其中包含的代碼(它工作正常,在這個文件中)加入到註冊JS:

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 usrn = document.getElementById("usrname1").value; 
var pswd = document.getElementById("pswd1").value; 

errCount += LogInVal(objForm.usrname); 
errCount/*1*/ += LogInVal(objForm.pswd); 

initialize_array();  

if (errCount != 0) 
{ 
    alert(errmsg); 
    return false; 
} 
else if(authentication(usrn, pswd) == true) 
{ 

    alert(msg); 
    return true; 
    setCookie('invalidUsr',' ttttt'); 
} 
else 
{ 
    alert(errmsg2); 
    return false; 
} 
} 

function authentication(usrname1, pswd1) 
{ 
for (var x = 0; x < arrPerson.length; x++) 
{ 
    if (arrPerson[x][0] == usrname1 && pswd1 == arrPerson[x][1]) 
     { 
      return true; 
     }  
} 
return false;  
} 

function setCookie(Cookiename,CookieValue) 
{ 
alert('executing setCookie'); 
document.cookie = Cookiename + '=' + CookieValue; 
} 

這是我的註冊HTML頁面:

<html> 
<!--onSubmit="SaveXML(person);"--> 
<head> 
<title>Registration</title> 
<link rel="stylesheet" type="text/css" href="CSS_LABs.css" /> 
</head> 


<body> 
<script type="text/javaScript" src="writeXML.js"> </script> 

<div class="form"> 
<form id="Registration" name="reg" action="" method="get" onSubmit="return initialize_array()"> 

Username:<input type="text" name="Usrn" id="Usrn" maxlength="10"/> <br/> 
Password:<input type="password" name="Pswd" id="Pswd" maxlength="20"/> <br/> 

<hr> 

PersonID:<input type="text" name="PersonID" id="PersonID"/> <br> 

<hr> 

First Name:<input type="text" name="FirstName" id="FirstName"/> <br> 
Last Name:<input type="text" name="LastName" id="LastName"/> 

<hr> 

DOB:<input type="text" name="DOB" id="DOB"/> <br> 

<hr> 

Gender:<input type="text" name="Gender" id="Gender"/> <br> 

<hr> 

Title:<input type="text" name="Title" id="Title"/> <br> 

<hr> 

<!--Secret Question:<br> 
<select name="secret?"> 
</select> <br> 

Answer:<input type="text" name="answer" /> <br> <br>--> 

<input type="submit" value="submit" /> 

</form> 
</div> 

</body> 

</html> 

希望我不會太困惑。

+0

尋找你在工具 - 錯誤控制檯在Firefox中得到的錯誤,看看是什麼樣的錯誤你得到 – Hacker 2011-05-24 03:38:11

+0

忘了提及,這隻適用於IE。IE似乎沒有顯示任何錯誤。忘了提及,Syntax看起來很好。只是代碼似乎沒有按照我想要的方式運行。 – MNX1024 2011-05-24 03:42:42

+0

如果你能確定1)預期行爲是什麼(消除對的需求?),以及2)它在哪裏/如何失敗? – 2011-05-24 03:52:53

回答

0

我在代碼中看到的是這樣的:

create XML file, start with <personInfo> 
if error, skip </personInfo> 
now add something else. 

這樣你就不會結束的XML元素。當然,它不會創建該文件。它不會寫無效的XML,這是「預期」的行爲。

+0

介紹它並給我一個例子與我的代碼?我實際上對網絡編程不熟悉,所以有很多我不知道。剛剛學習了一些基本的Javascript。 – MNX1024 2011-05-24 04:20:40

+0

其實我一直在重讀和不斷重讀,並且看到了它的位置。但我仍然認爲這是一個畸形的XML問題。 – jcolebrand 2011-05-24 04:23:20

0

你也可以調試你的jvascript代碼來啓用javascript調試。請轉至:工具> intenet選項>高級>瀏覽並取消選中(禁用腳本調試)。在Internet Explorer瀏覽器。那麼可以通過編寫調試器來附加調試器; @在javascript函數中的任何位置egs: function SaveXML(UserData)
{ debugger; var file = fso.CreateTextFile(FILENAME,true); file.WriteLine( '\ n'); file.WriteLine('\ n');
......................... }

+0

把調試器之後,我想要期待什麼?之後我是否只運行我的HTML頁面? – MNX1024 2011-05-24 05:03:38

+0

是的,只需刷新您的腳本應該運行的網頁即可。但我想你已經創建了HTML頁面,只是出於記事本或一些編輯器。實際上你需要有一些像VisualStudio2008這樣的ide,你可以下載一個免費版本,當你刷新你的頁面時它會開始爲你調試。並有調試器; JS函數中的寫入器 – 2011-05-24 05:18:30

+0

我正在使用Dreamweaver,它沒有顯示任何語法錯誤。只是在編輯代碼後,代碼纔會運行。 – MNX1024 2011-05-24 12:15:52