Ir para conteúdo

Arquivado

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

Thiago - Bulfaitelo

Problema versão do Browser e JavaScript

Recommended Posts

Boa tarde, pessoal,

 

Estou estudando um livro que tem o foco de trabalhar com Ajax e PHP, porem ele vai ensinando alguns conceitos e etc. Porem em um desses eu acabei não entendendo, segui exatamente o que está no livro, e ele não funciona corretamente no Firefox nem no IE nem no Chorome , Todos devidamente atualizados.

 

Sendo que no IE em modo de compatibilidade (ie 10 ou anterior) ele funciona sem problema algum.

 

Quando coloco pra debugar ele me acusa o seguinte erro:

 

Explorer:

SCRIPT5007: Não é possível obter a propriedade 'appendChild' de referência indefinida ou nula

Firefox:

TypeError: raiz is undefined

Código HTML:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Exibexml.html</title>
	<script>
		var docXML = null;
		function criaXML(){
			if(window.ActiveXObject){ // IE
				docXML = new ActiveXObject("Msxml2.DOMDocument.3.0");
				docXML.async = false;
				docXML.load("futebol.xml");
			}
			else if(document.implementation && document.implementation.createDocument)
				docXML =document.implementation.createDocument("", "doc", null);
		}
		function ExibeXML (){
			if(docXML==null){
				alert("erro na utilizaçõ do XMLDocument");
			}
			else{
				raiz = docXML.getElementsByTagName("jogadores")[0];
				var e = document.getElementById('texto');
				var t = document.createTextNode(raiz.xml);
				e.appendChild(t);
			}
		}
		function insereJogador(nome, posicao){
			raiz = docXML.getElementsByTagName("jogadores")[0];
			var novo = docXML.createElement('jogador'); // Tag Jogador
			var n = docXML.createElement('nome'); // tag nome
			var t = docXML.createTextNode(nome);
			n.appendChild(t);
			var p = docXML.createElement('posicao'); // tag Posicao
			var t2 = docXML.createTextNode(posicao);
			p.appendChild(t2);
			novo.appendChild(n);
			novo.appendChild(p);
			raiz.appendChild(novo);
		}
	</script>
</head>
<body>
	<pre><div id="texto"></div></pre>
	<script>
		criaXML();
		insereJogador('Cicinho', 'Lateral');
		ExibeXML();
	</script>
</body>
</html>

E o XML que é carregado para o test:

<?xml version="1.0" ?>
<jogadores>
	<jogador>
		<nome>Ronaldinho Gaúcho</nome>
		<posicao>Meio-Campo</posicao>
	</jogador>
	<jogador>
		<nome>Dida</nome>
		<posicao>Goleiro</posicao>
	</jogador>
	<jogador>
		<nome>Robinho</nome>
		<posicao>Atacate </posicao>
	</jogador>
</jogadores>

Desde já agradeço toda atenção de quem olhar :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

De vista estou vendo o seguinte, ao iniciar a execução o script verifica se é Internet explorer, então ele carrega um futebol.xml, caso não ele vai iniciar object.createDocument (namespaceURI, qualifiedName, docTypeObj) -> definição w3c, só que a condição do if não precisa ter essa verificação, deixa só o else mesmo, caso contrário ele não vai executar o documento e a variável continuará sendo docXML = NULL;

O problema esta começando pelo arquivo, tem um console de JS muito bom, aperta ctrl+shift+k no firefox, então vai digitando os comandos, vendo que tipo de retorno você tem isso vai lhe ajudar muito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para começar...

A sintaxe de document.createTextNode() é a seguinte:


texto = document.createTextNode(dado);


Em que:

  • texto é um node de texto.
  • dado é uma string contendo os dados para colocar no node de texto.

Ou seja, o argumento informado DEVE ser uma string.

Ok, agora o seu problema:

Explorer:
SCRIPT5007: Não é possível obter a propriedade 'appendChild' de referência indefinida ou nula
Firefox:
TypeError: raiz is undefined


Logicamente, EXISTE ALGO INDEFINIDO. Procure por "raiz".

var t = document.createTextNode(raiz.xml);

raiz.xml é uma string e você não colocou aspas. Deve estar entre aspas, caso contrário os navegadores entenderão como um outro tipo de dado. Por isso os navegadores estão indicando como indefinido, eles estão procurando por um valor string de raiz que não existe. Corrija:

var t = document.createTextNode("raiz.xml");

Preste atenção nesses detalhes enquanto estuda. Bons estudos! :bye:

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.