Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Walquíria

Exibição de xml no Mozilla

Recommended Posts

Bom dia!

Trabalho com programação para web, estou com uma dúvida em xml.

 

Qualquer ajuda será bem vinda.

 

Estou desenvolvendo um chat em xml. Ele já está pronto e funcionando corretamente em Internet Explorer.

Meu problema está sendo em exibir as mensagens no Mozilla.

Já estou gravando e exibindo os usuários logados, mas na hora de exibir as mensagens, não dá erro nehum, porém elas não são exibidas.

A Princípio pensei na possibilidade de ser o "innerHtml" que pudesse estar ocasionando esse problema, mas depois de alguns testes percebi que esta no xml msmo.

 

aqui o pedaço do código onde possivelmente acontece o erro

 

********************************************************************************

****

function processXML()

{

if (window.ActiveXObject) {

xmlDoc = new ActiveXObject("Microsoft.XMLDOM");

xmlDoc.async = false;

xmlDoc.load( "responsexml.asp")

 

}

else if(window.XMLHttpRequest) {

var objeXSLTProcessor;

var objeXmlDoc;

var objeXSLT;

objeXSLTProcessor = new XSLTProcessor();

xmlDoc = new XMLHttpRequest();

xmlDoc.open("GET", "responsexml.asp", false)

xmlDoc.send(null);

}

 

(...)

 

function makeDocument()

{

tableStr='<table width="100%" border="1" bordercolor="#FFFFFF" cellspacing="2" cellpadding="3">';

people=xmlDoc.documentElement.childNodes; (AQUI COMEÇA O ERRO)

 

for ( i=0;i<people.length;i++ )

{

if ((people.childNodes[0].text >=hora_certa && people.childNodes[7].text =="1" && people.childNodes[5].text =="0") || (people.childNodes[0].text >=hora_certa && people[ i].childNodes[8].text==parent.document.form.user.value)|| (people.childNodes[0].text >=hora_certa && people.childNodes[7].text =="1" && people.childNodes[5].text =="1" && people.childNodes[4].text ==eu))

{

(...)

tableStr+='<tr class="texto-chat"><td><font size=2 color="006600" face="arial">'+people.childNodes[0].text+' - <b>'+people.childNodes[1].text+' </b> '+people.childNodes[2].text+' <b>'+people.childNodes[4].text+'</b>: '+people.childNodes[3].text+'</font></td></tr>';

}

 

 

}

 

document.getElementById( "mainTable" ).innerHTML = tableStr;

tableStr+='</table>';

Timer();

 

}

 

********************************************************************************

***

Novamente gradeço qualquer ajuda.

 

Atenciosamente,

 

Walquíria

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae Walquiria, não sei se você já estudou sobre "escopo de variáveis" mas eu imagino que seu problema esteja aí.A variavel/objeto xmlDOC foi criada DENTRO da função processXML, portanto , teoricamente, ela só estará visível dentro da processXML.Declare ela por fora (usando um var xmlDoc).Talvez de certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, o problema não é o escopo da variável não. Reamente parece meio estranho a variával ser declarada em uma função e usada em outra, mas é por se tratar de xml.Eu tbm não entendi muito essa parte, mas fiz os testes e não alterou em nada.Obrigada!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que tem a ver com o DOM que ela esta usando...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não manjo muito de programação, mas acho q você tem de detectar o DOM do browser e ai instanciar, melhor você ver isso com o pessoal do JavaScript, heheh

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

Estou com dúvidas de como instanciar(nem sei se essa é a palavra correta) o DOM em javascript.

Para o IE eu consegui fazer e ta funcionando corretamente. Já no mozilla.....

Aqui ta um pedaço do código.

Agradeçlo desde já qualquer ajuda!!!!

Valew

 

function processXML()

{

if (window.ActiveXObject) {

xmlDoc = new ActiveXObject("Microsoft.XMLDOM");

xmlDoc.async = false;

xmlDoc.load( "responsexml.asp")

 

}

else if(window.XMLHttpRequest) {

var objeXSLTProcessor;

var objeXmlDoc;

var objeXSLT;

objeXSLTProcessor = new XSLTProcessor();

xmlDoc = new XMLHttpRequest();

xmlDoc.open("GET", "responsexml.asp", false)

xmlDoc.send(null);

}

 

(...)

 

function makeDocument()

{

tableStr='<table width="100%" border="1" bordercolor="#FFFFFF" cellspacing="2" cellpadding="3">';

people=xmlDoc.documentElement.childNodes; (AQUI COMEÇA O ERRO)

 

for ( i=0;i<people.length;i++ )

{

if ((people.childNodes[0].text >=hora_certa && people.childNodes[7].text =="1" && people.childNodes[5].text =="0") || (people.childNodes[0].text >=hora_certa && people[ i].childNodes[8].text==parent.document.form.user.value)|| (people.childNodes[0].text >=hora_certa && people.childNodes[7].text =="1" && people.childNodes[5].text =="1" && people.childNodes[4].text ==eu))

{

(...)

tableStr+='<tr class="texto-chat"><td><font size=2 color="006600" face="arial">'+people.childNodes[0].text+' - <b>'+people.childNodes[1].text+' </b> '+people.childNodes[2].text+' <b>'+people.childNodes[4].text+'</b>: '+people.childNodes[3].text+'</font></td></tr>';

}

 

 

}

 

document.getElementById( "mainTable" ).innerHTML = tableStr;

tableStr+='</table>';

Timer();

 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa será minha ultima alternativa.O problema é que nesse caso(do chat) ficaria melhor dessa for,a que estou tentando fazer... o xsl nesse caso vai fazer meu chat ser mais lento...Quero tentar fazer dessa forma que comecei...se caso nao conseguir(meu tempo realmente esta se esgotando), eu uso essa alternativa!Valew!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Saquei. vou dar uma pesquisada e já posto.

 

Estude sobre o responseXML do xmlHttpRequest.

 

Eu não estudei muito sobre ele não e nem fiz testes (isso vai ficar por sua conta), mas tenta assim:

 

if(document.all){	people=xmlDoc.documentElement.childNodes; }else{	people= xmlDoc.responseXML.documentElement;}

Sobre o xmlhttprequest no mozilla/firefox: http://developer.mozilla.org/pt/docs/AJAX:Como_come%C3%A7ar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Li os arquivos, pesquisei em alguns outros sites...alterei partes do código( a solução parece estar prósima)....mas ainda não funcionou....function processXML() { if (window.ActiveXObject) { xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async = false; xmlDoc.load( "responsexml.asp") } else if(window.XMLHttpRequest) { var objeXSLTProcessor; var objeXmlDoc; var objeXSLT; objeXSLTProcessor = new XSLTProcessor(); http_request = new XMLHttpRequest(); http_request.open("GET", "responsexml.asp", false) http_request.send(null); xmlDoc = xm.responseXML; } toBottom();} (...) function makeDocument() { tableStr='<table width="100%" border="1" bordercolor="#FFFFFF" cellspacing="2" cellpadding="3">'; if(document.all) { people = xmlDoc.documentElement.childNodes; } else { people = xmlDoc.responseXML.documentElement; } var hora_certa=parent.document.form.relogio.value; var eu=parent.document.form.user2.value; for ( i=0;i<people.length;i++ ) (...) document.getElementById( "mainTable" ).innerHTML = tableStr; tableStr+='</table>'; Timer();}:)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não dá nenhum erro específico, apenas não são exibidas as mensagens.Esse é o mais difícil... se desse erro ao menos seria mais fácil encontrar onde se encontra o erro, mas.....E eu já especifiquei o mime do documento com o "application/xml" (o que poderia causar erros tbm):/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testa se o people tá chegando (usando alert nele). E usa alerts também em outras partes pra ver até onde tá sendo executado corretamente sem erro.Ah. E ve se tem alguma observação no console de erros de javascript do FF.Ah e tenta também colocar o child nodes quando for responseXML:{people = xmlDoc.responseXML.documentElement.childNodes;}PS.: você leu isso aqui no link que te passei:

Algumas versões de alguns browsers Mozilla não irão funcionar bem se a resposta do servidor não possuir um cabeçalho mime-type XML. Para satisfazer isto, você pode usar uma chamada extra a um método para ultrapassar o cabeçalho enviado pelo servidor, só no caso de não ser no formato text/xml.http_request = new XMLHttpRequest();http_request.overrideMimeType('text/xml');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Walquiria...olha só, não sei que ainda ja resolveu seu problema,mas, aqui onde trabalho, ja desenvolvemos alguns modulos dos nossos softwares com AJAX.Será que poderia postar o seu codigo dinâmico por favor? Para a gente poder dar uma analizada?É realmente mto estranho dar erro no Firefox, pq aqui, acontece justamente o contrário...o erro sempre dá no internet explorer. Se puder fazer...de repente, podemos ajuda-la....Valews....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá! Eu não consegui terminar o cahta ainda não.Tive de deixar ele uns dias de lado, mas voltei agora.O código é grande, por isso não vou postar aqui. Mas ficaria feliz de pertilhar sugestões (principalmente pq você conseguiu o que eu não consegui ainda: fazer o xml funcionar direitinho no firefox :).Meu e-mail é walquiriabm@yahoo.com.bre meu msn é walquiriabm@hotmal.com.Aguardo seu contato, pra gente partilhar nosso conhecimento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém sabe criar um parser para o mozill?(DomParser)Estou com dificuldade. Os tutoriais que encontro ensinam a criar um parser com string, preciso de um com o xml inteiro.:)valews

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom , eu peguei um exemplo menor(mais simples) se ele funcionar eu aplico no código certo) <script type="text/javascript" language="javascript"> var http_request = false; function makeRequest(url) { http_request = false; if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!http_request) { alert('Giving up :( Cannot create an XMLHTTP instance'); return false; } http_request.onreadystatechange = alertContents; http_request.open('GET', url, true); http_request.send(null); } function alertContents() { if (http_request.readyState == 4) { if (http_request.status == 200) { var xmldoc = http_request.responseXML; var root_node = xmldoc.getElementsByTagName('note');//ATÉ AQUI TÁ TUDO OK, FUNCIONANDO DIREITINHO, MAS QUANDO VOU EXIBIR ABAIXO, SÓ FUNCIONA NO IE alert(root_node[1].childNodes[0].text); } else { alert('There was a problem with the request.'); } } } </script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda não testei não, mas acho que já sei:

 

1) O mozilla interpreta espaços e "ENTERS" que estão entre as tags como filhos.

Ou seja, pra acessar o produto "arroz" abaixo voce teria que pegar o segundo filho (childNodes[1]) no Firefox.

<produtos>  <produto id="a">Arroz</produto></produtos>
Eu imagino que este seja o problema.

Testa aí e me fala se acessando o segundo elemento você deu certo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.