2012-07-04 2 views
2

Я новичок в кодировании XML, и сейчас я работаю над сайтом, чтобы помочь мне улучшить навыки. Я думаю, что я получил весь синтаксис для страницы, но, похоже, он не работает. Вот код для индексной страницы, а также XML-файл, который я пытаюсь использовать.XML-проблемы - загружает пустую страницу

<html> 
<body> 

<script type="text/javascript"> 
var link= "http://api.remix.bestbuy.com/v1/stores(area(55423,10))+products(name=playstation*)?show=storeId,name,products.sku,products.name&page=1&apiKey=ydpyq9h9cmpmzaakbawv9mzk"; 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.open("GET","test.xml",false); 
xmlhttp.send(); 
xmlDoc=xmlhttp.responseXML; 
document.write("<table border='1'>"); 
var x = xmlDoc.getElementsByTagName("name"); 
for (i=0;i<5;i++) 
    { 
    document.write("<tr><td>"); 
    document.write(x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue); 
    document.write("Step 2"); 
    document.write("</td><td>"); 
    document.write(x[i].getElementsByTagName("distance")[0].childNodes[0].nodeValue); 
    document.write("</td></tr>"); 
    } 
document.write("</table>"); 
</script> 

</body> 
</html> 

и XML я отделался запрос образец лучше купить

<stores warnings="Distances are in terms of miles (default). Your product criteria matches too many records. That exceeds number of records that we allow on the product side of a store-product query. We've automatically truncated the products down to the first 100. These results are not complete. Avoid this by narrowing the number of products in your query." currentPage="1" totalPages="1" from="1" to="10" total="10" queryTime="0.015" totalTime="0.153" canonicalUrl="/v1/stores(area("55423",10))+products(name="playstation*")?show=storeId,name,products.sku,products.name&apiKey=ydpyq9h9cmpmzaakbawv9mzk" partial="false"> 
    <store> 
    <storeId>281</storeId> 
    <name>Richfield</name> 
    <products> 
     <product> 
     <sku>9984133</sku> 
     <name>Assassin's Creed Brotherhood - PlayStation 3</name> 
     </product> 
     <product> 
     <sku>7917141</sku> 
     <name>Assassin's Creed Greatest Hits - PlayStation 3</name> 
     </product> 
     <product> 
     <sku>2613621</sku> 
     <name>Assassin's Creed: Revelations - PlayStation 3</name> 
     </product> 
     <product> 
     <sku>3109269</sku> 
     <name>Assassin's Creed: Revelations Collector's Edition (Game Guide) - Xbox 360, PlayStation 3, Windows</name> 
     </product> 
     <product> 
     <sku>3109065</sku> 
     <name>Assassin's Creed: Revelations The Complete Official Guide (Game Guide) - Xbox 360, PlayStation 3, Windows</name> 
     </product> 
     <product> 
     <sku>9927337</sku> 
     <name>Batman: Arkham Asylum Game of the Year Edition - PlayStation 3</name> 
     </product> 
     <product> 
     <sku>3116162</sku> 
     <name>Batman: Arkham City (Signature Series Game Guide) - Windows, PlayStation 3, Xbox 360</name> 
     </product> 
     <product> 
     <sku>5260722</sku> 
     <name>Batman: Arkham City - Game of the Year Edition - PlayStation 3</name> 
     </product> 
     <product> 
     <sku>2173056</sku> 
     <name>Batman: Arkham City - PlayStation 3</name> 
     </product> 
     <product> 
     <sku>3550073</sku> 
     <name>Battlefield 3 (Game Guide) - Xbox 360, PlayStation 3, Windows</name> 
     </product> 
</products> 
    </store> 
</stores> 

ответ

1

Вы должны поставить код, который выполняется после того, как данные загружены в onreadystatechange случае xmlhttp объекта: http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp

xmlhttp.onreadystatechange = function() { 
    if (httprequest.readyState == 4) { 
     // Response finished 
     if (httprequest.status = 200) { 
      // everything OK 
      // Parse the data 
     } else { 
      // Something gone wrong with the request 
     } 
    } 
} 

Edit:
Lo Теперь я понял, что вы используете var x = xmlDoc.getElementsByTagName("name");. Это выберет КАЖДЫЙ тег name, включая внутренний. Попробуйте использовать store, чтобы получить каждый вместо имени, а затем найдите product.

Кроме того, вы используете жестко закодированный предел в цикле for. Используйте x.length вместо: for (var i=0; i<x.length;i++)

+0

Это ошибка я получаю, когда, когда я отладки через хром «неперехваченный TypeError: Невозможно вызвать метод„getElementsByTagName“нулевой» –

+0

Вы сделали изменения я сказал? – rcdmk

+0

Я пытался, но не уверен, что я поступаю правильно. Я добавляю остальную часть кода в состояние статуса 200? Это поможет, если вы опубликуете отредактированный код, если сможете. –

Смежные вопросы