2010-12-26 12 views
1

javascriptを使用してcustomers.xmlを読み込もうとしています。xmlドキュメントをFirefoxで読む

私の教授は、 `ActiveXObjectを使ってxmlを読むように教えてくれました。彼はcustomers.xmlを読んでユーザ名とパスワードをチェックするサンプルログインページを作るという割り当てを私たちに与えました。

私はDOMParserを使って、それがfirefoxで動作するようにしています。

しかし、[ログイン]ボタンをクリックすると、このエラーが発生します。

Error: syntax error Source File: file:///C:/Users/Searock/Desktop/home/project/project/login.html Line: 1, Column: 1 Source Code: customers.xml

ここに私のコードです。

login.js

var xmlDoc = 0; 

function checkUser() 
{ 
    var user = document.login.txtLogin.value; 
    var pass = document.login.txtPass.value; 
    //xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
    /* 
    xmlDoc = document.implementation.createDocument("","",null); 
     xmlDoc.async = "false"; 
    xmlDoc.onreadystatechange = redirectUser; 
    xmlDoc.load("customers.xml"); 

    */ 
    var parser = new DOMParser();   
    xmlDoc = parser.parseFromString("customers.xml", "text/xml"); 
    alert(xmlDoc.documentElement.nodeName); 

    xmlDoc.async = "false"; 
    xmlDoc.onreadystatechange = redirectUser;     
} 

function redirectUser() 
{ 
    alert(''); 
    var user = document.login.txtLogin.value; 
    var pass = document.login.txtPass.value; 
    var log = 0; 
    if(xmlDoc.readyState == 4) 
    { 
     xmlObj = xmlDoc.documentElement; 
     var len = xmlObj.childNodes.length; 

     for(i = 0; i < len; i++) 
     { 
      var nodeElement = xmlObj.childNodes[i]; 
      var userXml = nodeElement.childNodes[0].firstChild.nodeValue; 
      var passXml = nodeElement.childNodes[1].firstChild.nodeValue; 
      var idXML = nodeElement.attributes[0].value 

      if(userXml == user && passXml == pass) 
      { 
       log = 1; 
       document.cookie = escape(idXML); 
       document.login.submit(); 
      } 
     } 
    } 

    if(log == 0) 
    { 
     var divErr = document.getElementById('Error'); 
     divErr.innerHTML = "<b>Login Failed</b>"; 

    } 
} 

customers.xml

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

<customers> 
    <customer custid="CU101"> 
     <user>jack</user> 
     <pwd>PW101</pwd> 
     <email>[email protected]</email> 
    </customer> 
    <customer custid="CU102"> 
     <user>jill</user> 
     <pwd>PW102</pwd> 
     <email>[email protected]</email> 
    </customer> 
    <customer custid="CU103"> 
     <user>john</user> 
     <pwd>PW103</pwd> 
     <email>[email protected]</email> 
    </customer> 
    <customer custid="CU104"> 
     <user>jeff</user> 
     <pwd>PW104</pwd> 
     <email>[email protected]</email> 
    </customer> 
</customers> 

私はラインalert(xmlDoc.documentElement.nodeName);

にparsererrorメッセージを取得し、私は私のコードが悪いのか分かりません。ある人が私を正しい方向に向けることができますか?

編集:

[OK]を、私は解決策を見つけました。

var xmlDoc = 0; 
var xhttp = 0; 
function checkUser() 
{ 
    var user = document.login.txtLogin.value; 
    var pass = document.login.txtPass.value; 
    var err = ""; 
    if(user == "" || pass == "") 
    { 
     if(user == "") 
     { 
      alert("Enter user name"); 
     } 

     if(pass == "") 
     { 
      alert("Enter Password"); 
     } 

     return; 
    } 

    if (window.XMLHttpRequest) 
    { 
     xhttp=new XMLHttpRequest(); 
    } 
    else // IE 5/6 
    { 
     xhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xhttp.onreadystatechange = redirectUser;   
    xhttp.open("GET","customers.xml",true); 
    xhttp.send(); 
} 

function redirectUser() 
{ 
    var log = 2; 
    var user = document.login.txtLogin.value; 
    var pass = document.login.txtPass.value; 
    if (xhttp.readyState == 4) 
    { 
     log = 0; 
     xmlDoc = xhttp.responseXML; 
     var xmlUsers = xmlDoc.getElementsByTagName('user'); 
     var xmlPasswords = xmlDoc.getElementsByTagName('pwd'); 
     var userLen = xmlDoc.getElementsByTagName('customer').length; 
     var xmlCustomers = xmlDoc.getElementsByTagName('customer'); 

     for (var i = 0; i < userLen; i++) 
     { 
      var xmlUser = xmlUsers[i].childNodes[0].nodeValue; 
      var xmlPass = xmlPasswords[i].childNodes[0].nodeValue; 
      var xmlId = xmlCustomers.item(i).attributes[0].nodeValue; 

      if(xmlUser == user && xmlPass == pass) 
      { 
       log = 1; 
       document.cookie = xmlId; 
       document.login.submit(); 
       break; 
      } 
     } 

    } 

    if(log == 0) 
    { 
     alert("Login failed"); 
    } 
} 

ありがとうございます。

答えて

1

parseFromStringは、 "customer.xml"という文字列を解析しています。なぜなら、最初の引数はXMLドキュメントの実際の内容を含む文字列でなければならないからです。

XMLファイルを取得するために、このようなものを使用することができます。

if (window.XMLHttpRequest) 
    { 
    xhttp=new XMLHttpRequest(); 
    } 
else // IE 5/6 
    { 
    xhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xhttp.open("GET","customer.xml",false); 
xhttp.send(); 
xmlDoc=xhttp.responseXML; 

Source

+0

XMLDOC = xhttp.responseXMLを。うまくいきます。上記のコードでエラーが発生するため、ドキュメントを解析することができますか? – Searock