Trouble running AJAX

时间:2016-10-20 13:07:07

标签: javascript ajax

I'm doing homework and must use javascript object and array in my ajax. I'm sure there is something wrong in the code, but as I have very limited knowledge I just can't find it. I'm just currently learning this and a few bits and pieces were followed through examples I could find online.

XML

    <?xml version="1.0" encoding="UTF-8" ?> 
<onlineOrder month="03/2015">
  <product>
    <code>CRA01</code>
    <unitPrice>10.50</unitPrice>
    <lastMonth>101</lastMonth>
    <thisMonth>120</thisMonth> 
  </product>
  <product>
    <code>CRA02</code>
    <unitPrice>21.30</unitPrice>
    <lastMonth>50</lastMonth>
    <thisMonth>43</thisMonth> 
  </product>
  <product>
    <code>HOB11</code>
    <unitPrice>8.50</unitPrice>
    <lastMonth>201</lastMonth>
    <thisMonth>312</thisMonth> 
  </product>
  <product>
    <code>HOB13</code>
    <unitPrice>43.50</unitPrice>
    <lastMonth>20</lastMonth>
    <thisMonth>21</thisMonth> 
  </product>
  <product>
    <code>JEW21</code>
    <unitPrice>200.00</unitPrice>
    <lastMonth>7</lastMonth>
    <thisMonth>11</thisMonth> 
  </product>
  <product>
    <code>JEW22</code>
    <unitPrice>450.00</unitPrice>
    <lastMonth>10</lastMonth>
    <thisMonth>4</thisMonth> 
  </product>
  <product>
    <code>GAM41</code>
    <unitPrice>20.30</unitPrice>
    <lastMonth>420</lastMonth>
    <thisMonth>450</thisMonth> 
  </product>
  <product>
    <code>GAM42</code>
    <unitPrice>45.50</unitPrice>
    <lastMonth>361</lastMonth>
    <thisMonth>180</thisMonth> 
  </product>
</onlineOrder>

HTML - The part with the table is something I can work out pretty easily myself. The problem is that I am only displaying the button, and when pressed it is not displaying anything. I do not use jQuery and never have, so sorry if this is a pain to deal with.

  <script>
    function getOnlineOrderAjax() {
      var xhttp = new XMLHttpRequest();
          xhttp.onreadystatechange = function() {
        if (xhttp.readyState == 4 && xhttp.status == 200) {
            processResult(xhttp);
        }
      };

    xhttp.open("GET", "A8.xml", true);
    xhttp.send();
    }


    function processResult(xhttp) {
      var xml = xhttp.responseXML;
      var onlineOrderObj = parseXML(xml);

    console.log(onlineOrderObj);
    display(onlineOrderObj);
    }


    function parseXML(xml) {
      var onlineOrderObj = {}; //hold information
      var onlineOrderElement = xml.getElementsByTagName("onlineOrder")[0];
          onlineOrderObj.month = onlineOrderElement.getAttribute("month");
          onlineOrderObj.productList = []; //create array

      var productElements = onlineOrderElement.getElementsByTagName("product"); 
        for(var i = 0; i < productElements.length; i++) {
            var product = {}; //create index object

                product.code = productElements[i].getElementsByTagName("code")[0].childNodes[0].nodeValue;
                product.unitPrice = Number(indexElements[i].getElementsByTagName("unitPrice")[0].childNodes[0].nodeValue);
                product.lastMonth = Number(indexElements[i].getElementsByTagName("lastMonth")[0].childNodes[0].nodeValue);
                product.thisMonth = Number(indexElements[i].getElementsByTagName("thisMonth")[0].childNodes[0].nodeValue);

            onlineOrderObj.productList.push(product); //object into array
        }
      return onlineOrderObj;
    }


    function display(onlineOrderObj){
        var change = 0;

        var html = "<h1>Online order statistics for " + onlineOrderObj.month + "</h1>";
            html += "<table border='1'>";
            html += "<tr><th>Code</th><th>Unit Price</th><th>Last Month </th><th>This Month</th></tr>";
        for(var i=0; i < onlineOrderObj.productList.length; i++) { 
            html += "<tr>";
            html += "<td align='center'><b>" + onlineOrderObj.productList[i].code + "</b></td>";
            html += "<td align='right'>" + onlineOrderObj.productList[i].unitPrice + "</td>"; 
            html += "<td align='right'>" + onlineOrderObj.productList[i].lastMonth + "</td>";
            html += "<td align='right'>" + onlineOrderObj.productList[i].thisMonth + "</td>";   
            html += "</tr>"; 
        }
        html += "</table>"; 

        var onlineOrderDiv = document.getElementById("onlineOrderDiv");
            onlineOrderDiv.innerHTML = html;
    }
   </script>
</head>
 <body>
   <button onClick="getOnlineOrderAjax()">
   Click here to view online order statistics
   </button>
   <br /><br />
   <div id="onlineOrderDiv" />

</body>
</html>

1 个答案:

答案 0 :(得分:0)

我认为在大多数情况下你做得对,虽然我不明白你为什么要使用AJAX。

你在parseXML函数中犯了错误。它应该是productElements而不是indexElements:

logo

此外,您应该始终使用div的结束标记。

您可以查看此plunker