Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou com um problema fiz um código javascript para exibir via AJAX um XML com uma lista:
Meu XML está assim:
[inline]
<?xml version="1.0" encoding="ISO-8859-1"?>
<telas>
<item>
<title>Lorem ipsum</title>
<title>Dolor sit amet</title>
</item>
<item>
<title>Lorem ipsum dolor</title>
<title>Ipsum dolor sit amet</title>
</item>
</telas>
[/inline]
Eu quero listar o conteudo da tag <item> (do XML) e colocar dentro do <li> (no meu HTML) a tag <title> (do XML), mas só mostra o conteúdo da primeira tag title, eu preciso que mostre todas as tags <title> que eu tiver no XML.
Creio que o problema seja essa parte do meu código:
[inline]
exibir+=tela[valor].getElementsByTagName('title')[0|1].firstChild.nodeValue;[/inline]
Como eu posso alterar isso para que funcione de forma adequada (a que eu quero) ?
exemplo:
<script>
var str = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\
<telas>\
<item>\
<title>Lorem ipsum</title>\
<title>Dolor sit amet</title>\
</item>\
\
<item>\
<title>Lorem ipsum dolor</title>\
<title>Ipsum dolor sit amet</title>\
</item>\
</telas>";
var parser = new DOMParser(),
xml = parser.parseFromString(str,"text/xml"),
items = xml.getElementsByTagName("telas")[0].getElementsByTagName("item"),
i = 0,
max = items.length;
for (;i < max; i++) {
console.log(items*.getElementsByTagName("title")[0].innerHTML);*
*
console.log(items**.getElementsByTagName("title")[1].innerHTML);*
*
}*
*
</script>*
ou vc faz outro loop dentro de items
É mais ou menos isso, mas não consegui adaptar ao meu código, veja como está meu javascript:
[inline]
<script type="text/javascript">
//faz a requisição das telas
var soma = -1;
function simulador(){
var contador = document.getElementById("contador").value;
if(contador >=2 ){
document.getElementById("tela").innerHTML = '<ul><li>Não há mais itens a serem exibidos</ul></li>';soma = soma + 1;
document.getElementById("contador").value = soma;
var valor = document.getElementById("contador").value;
function ajaxRequest(){
var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
for (var i=0; i<activexmodes.length; i++){
try{
return new ActiveXObject(activexmodes*)*
}
catch(e){
//suppress error
}
}
}
else if (window.XMLHttpRequest) // if Mozilla, Safari etc
return new XMLHttpRequest()
else
return false
}
var FazerRequisicao=new ajaxRequest()
if (FazerRequisicao.overrideMimeType)
FazerRequisicao.overrideMimeType('text/xml')
FazerRequisicao.onreadystatechange=function(){
if (FazerRequisicao.readyState==4){
if (FazerRequisicao.status==200 || window.location.href.indexOf("http")==-1){
* var xmldata=FazerRequisicao.responseXML //retrieve result as an XML object*
* var tela=xmldata.getElementsByTagName("item")*
* var exibir='<ul>'*
*exibir+='<li>'*
exibir+=tela[valor].getElementsByTagName('title')[0].firstChild.nodeValue;
*exibir+='</li>'*
* exibir+='</ul>'*
document.getElementById("tela").innerHTML=exibir
}
else{
alert("Ocorreu um erro durante a requisição, tente novamente")
}
}
}
FazerRequisicao.open("GET", "telas.xml", true)
FazerRequisicao.send(null)
}
}
</script>
[/inline]
e a minha marcação:
[inline]
*<button style="position: absolute;width: 30px;height: 30px;top: 406px;left: 219px;background: transparent;border: none;border-radius: 100px;cursor: pointer;" type="button" id="contador" value="-1" onclick="simulador();"></button>*
*<div id="tela" style="position: absolute;width: 150px;padding: 10px;top: 130px;height: 56px;left: 100px;"></div>*
[/inline]Alguém sabe de alguma solução?
@Odair Oliveira_163654,
Vc não aplicou nada do que sugeri.. o seu código continua igual ao de qndo o post começou.
Como o William Bruno falou:
Mude:
exibir += tela[valor].getElementsByTagName('title')[0].firstChild.nodeValue;
Para:
var titulos = tela[valor].getElementsByTagName('title');
for (var t = 0; i < titulos.length; t++) exibir += titulos[t].firstChild.nodeValue;<script>
var xmlhttp = new XMLHttpRequest();
xmlhttp.overrideMimeType('text/xml');
xmlhttp.open("GET", "telas.xml", true);
xmlhttp.send();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState === 4) {
var $xml = xmlhttp.responseXML,
$titles = $xml.getElementsByTagName("telas")[0].getElementsByTagName("title"),
i = 0,
max = $titles.length;
for (;i < max;i++) {
console.log($titles[i].innerHTML);
}
}
};
</script>
Saída:
GET http://localhost/~wbruno/telas.xml
304 Not Modified - 173ms - a.html (linha 5)
Lorem ipsum
Dolor sit amet
Lorem ipsum dolor
Ipsum dolor sit amet
Alguém pode me ajudar?