2016-11-09 10 views
1

ここでは、AJAX呼び出しによって返されたXMLデータでHTMLテーブルを作成しようとしています。XMLデータからHTMLテーブルを完全に埋め込むことができません

ここで私の問題はHTMLテーブルを完全に埋めることができないことです。私はAJAXにとって非常に新しいので、XML解釈の仕組みやエラーの根本原因を解読する方法を理解することができません。ここで

は私のWebページのコードは、私が取得しています出力は Click Here

あるAJAX呼び出しから

<books> 
    <book>  
      <author>mark</author> 
      <isbn>1</isbn> 
      <pages>500</pages> 
      <price>2000.0</price> 
      <title>java</title> 
    </book> 
    <book> 
      <author>john</author> 
      <isbn>2</isbn> 
      <pages>100</pages> 
      <price>1000.0</price> 
      <title>advancedjava</title> 
    </book> 
    <book> 
      <author>paul</author> 
      <isbn>3</isbn> 
      <pages>500</pages> 
      <price>500.0</price> 
      <title>tomcat</title> 
    </book> 
    <book> 
      <author>jack</author> 
      <isbn>4</isbn> 
      <pages>1000</pages> 
      <price>5000.0</price> 
      <title>rest</title> 
    </book> 
</books> 

以下のように、私は誰も私を説明することができ、XMLデータを取得

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <style> 
     table, th, td 
     { 
      border: 1px solid black; 
      border-collapse: collapse; 
     } 
     th, td 
     { 
      padding: 5px; 
     } 
    </style> 
</head> 
<body> 
    <h1>Enter Book Details</h1><br> 

    <form method="post" action="http://localhost:8080/mysql/glarimy/lib/addbook" onsubmit="myButton.disabled = true; return true;"> 
     Title :<br> <input type = "text" name = "title" ><br> 
     Author :<br><input type = "text" name = "author" ><br> 
     Price : <br><input type = "text" name = "price" ><br> 
     No. of Pages :<br><input type="text" name = "pages" ><br> 
     <input type = "submit" id="submit" value = "Add Book"> 
     <input type = "reset" value ="Reset"><br><br> 
    </form> 

    <button onclick = "location.href = 'http://localhost:8080/mysql/glarimy/lib/getall'" type = "button">Get all book data in XML</button> 
    <button type="button" onclick="loadXMLDoc()">Get all books data </button> 
    <table id="demo"></table> 
    <script> 
     function loadXMLDoc() 
     { 
      var xmlhttp = new XMLHttpRequest(); 
      xmlhttp.onreadystatechange = function() 
      { 
       if (this.readyState == 4 && this.status == 200) 
       { 
        myFunction(this); 
       } 
      }; 
      xmlhttp.open("GET", "http://localhost:8080/mysql/glarimy/lib/getall", true); 
      xmlhttp.send(); 
     } 
     function myFunction(xml) 
     { 
      var i; 
      var xmlDoc = xml.responseXML; 
      var table="<tr><th>ISBN</th><th>Title</th><th>Author</th><th>Price</th><th>No. of Pages</th></tr>"; 
      var x = xmlDoc.getElementsByTagName("book"); 
      for (i = 0; i < x.length; i++) 
      { 
       table += "<tr><td>" + 
       x[i].getElementsByTagName("isbn")[0].childNodes[0].nodeValue + 
       "</td><td>" + 
       x[i].getElementsByTagName("title")[0].childNodes[0].nodeValue + 
       "</td><td>"; 
       x[i].getElementsByTagName("author")[0].childNodes[0].nodeValue + 
       "</td></td>"; 
       x[i].getElementsByTagName("pages")[0].childNodes[0].nodeValue + 
       "</td><td>" + 
       x[i].getElementsByTagName("price")[0].childNodes[0].nodeValue + 
       "</td><tr>"; 
      } 
      document.getElementById("demo").innerHTML = table; 
     } 
    </script> 
</body> 
</html> 

ですそのAJAXコードは実際にどのように動作していますか?私はXMLデコード部分をトレースすることができません。

更新された出力:Click this

+0

順序がに従って正しくありません。 'var table'だからテーブルの項目の順序が間違っているという問題です。 –

+0

@KevinKloetあなたのコメントを詳しく教えてください。私は私の質問にいくつかの変更を加え、一度チェックします。 –

+0

あなたのforループでの編集の後でさえ、最後の2つの 'td'が逆になっています。' ISBN、Title、Author、Price、Number of Pages'は 'var table'と' ISBN 'タイトル、著者、ページ数、価格はforループの順序です。 –

答えて

2

問題は、あなたのテーブルの建物であるように見えます。 <tr>タグを閉じる必要はなく、セミコロンが多すぎる場合は閉じます。この修正です:あなたはこの画像であなたのコードで問題を見ることができます

for (i = 0; i < x.length; i++) 
{ 
    table += "<tr><td>" + 
    x[i].getElementsByTagName("author")[0].childNodes[0].nodeValue + 
    "</td><td>" + 
    x[i].getElementsByTagName("isbn")[0].childNodes[0].nodeValue + 
    "</td><td>"+ 
    x[i].getElementsByTagName("pages")[0].childNodes[0].nodeValue + 
    "</td><td>" + 
    x[i].getElementsByTagName("price")[0].childNodes[0].nodeValue + 
    "</td><td>"+ 
    x[i].getElementsByTagName("title")[0].childNodes[0].nodeValue + 
    "</td></tr>"; 
} 

:あなたは、テーブルに行を追加していた中で、あなたのforループの enter image description here

+0

@mplungjanをご確認ください。ありがとうございました。 – Dekel

+0

これは正確なコードですか?あなたがそこに取り除かなければならないセミコロン( ';')があることに注意してください。 – Dekel

+0

これは私がやったばかげたミスです。しかし、私はそれを変更した後でも、私は5列のデータを取得していない、2つの列だけが表示されています。私の質問で行った編集を確認してください。 –

関連する問題