Erro na requisição do AJAX

10 respostas
W

Boa tarde,

To com um probleminha, to tentando carregar um arquivo.txt, é um código simples pois to iniciando em ajax

Código ajax

window.onload = function(){
	
	document.getElementById("botao").onclick = function(){
		
		var ajax = new XMLHttpRequest();
		ajax.onreadystatechange = function(){
			if(ajax.readState == 4){
				alert("requisicao chegou");
			}
		}
		ajax.open("POST", "ajax/arquivo.txt");
		ajax.send(null);
		return false;
	}
		
}

É apenas para carrega um arquivo.txt do diretorio, porem aparece esse erro

XMLHttpRequest cannot load file:///C:/Users/wippel/JavaScript%20e%20Ajax/ajax/arquivo.txt. Cross origin requests are only supported for HTTP.
Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101 ajaxScr.js:1

Agradeço desde já, abrass

10 Respostas

W

up

W

Caminho correto, código correto, ngm nunca teve esse problema? n pode se um bug ou sei la?!

K

Olá amigo,
você usa Chrome?
Caso sim, coloque o seguinte comando no fim do endereço do atalho para o chrome:

--allow-file-access-from-files

Ficando mais ou menos assim:

Abraços.

W

kilate:
Olá amigo,
você usa Chrome?
Caso sim, coloque o seguinte comando no fim do endereço do atalho para o chrome:

--allow-file-access-from-files

Ficando mais ou menos assim:

Abraços.

Sim uso o chrome e o mozilla tb, o estranho é que to seguindo video aulas e la funciona esse mesmo codigo que postei…
e não entendi a sua dica ;x

N

Você precisa rodar suas páginas em um servidor, por exemplo um apache na sua máquina ou usar
a solução proposta pelo kilate. O Chrome considera que cada arquivo aberto é uma url
e não permite requisições Ajax de um arquivo para outro.

Dê uma pesquisada sobre Same Origin Policy
pra ver como funciona esta política de segurança.

W

natanaelv:
Você precisa rodar suas páginas em um servidor, por exemplo um apache na sua máquina ou usar
a solução proposta pelo kilate. O Chrome considera que cada arquivo aberto é uma url
e não permite requisições Ajax de um arquivo para outro.

Dê uma pesquisada sobre Same Origin Policy
pra ver como funciona esta política de segurança.

Trabalho com java web, mecho com jsf, jpa, e claro tem que ser rodadas em um servidor… e como havia dito recentemente comecei a estuda AJAX,
o motivo de eu ter postado essa duvida se resume a essa video aula da universidade XTI http://www.youtube.com/watch?v=aPnZL-DFQXI
se puder da uma olhada a partir de 12 minu + ou -, é exatamente oq eu fiz

W

Fiz de uma forma mais completa, mais complexa e cross browser, o problema agora é que sei o erro só não sei o porque,
talvez pode ser algo que digitei errado ou alguma coisa fora do lugar, to postando aqui pra darem uma olhada e me ajudar se puderem… talvez algo que eu não tenha visto
e também fica pra darem uma avaliada se quiserem, pois acabo de concluir o curso de video aulas que fiz em casa.

window.onload = function(){
	
	document.getElementById("botao").onclick = function(){
	requisitar("ajax/arquivo.txt");
		return false;
	}
	
	/*Aparece imagem carregando enquanto aguarda resposta do servidor*/
	function carregando(c){
		while(c.hasChildNodes()){
			c.removeChild(c.lastChild);
		}
		var img = document.createElement("img");
		img.setAttribute("src", "imgs/ajax-loader.gif");
		c.appendChild(img);
	}
	
	/*Mostra resposta do servidor*/
	function mostrar(ajax){
		var r =  document.getElementById("resposta");
		while(r.hasChildNodes()){r.removeChild(r.lastChild);}
		//r.appendChild(document.createTextNode(ajax.responseText));
		alert(ajax.responseText);
	}
	
	/*Requisita a resposta ao servidor*/
	function requisitar(url){
		var ajax = iniciaAjax();
		carregando(document.getElementById("resposta"));
		ajax.onreadystatechange = function(){
		//status=200, statusText=OK, responseText, responseXML
			if(ajax.readState == 4){
				mostrar(ajax);
			}
		}
		ajax.open("POST", url);
		ajax.send(null);
	}
	
	/*Inicia conexao (cross browser)*/
	function iniciaAjax(){
		var ajax = null;
		if(window.XMLHttpRequest){
			ajax = new XMLHttpRequest();
		}else if(window.ActiveXObject){
			try{
				ajax = new ActiveObject("Msxm12.XMLHTTP");
			}catch(e){
				ajax = new ActiveXObject("Microsoft.XMLHTTP");
		}	
	}
}
		
}

O erro, segundo o Chrome e testei no Firefox tb

Uncaught TypeError: Cannot set property 'onreadystatechange' of undefined

diz que a propriedade ‘onreadystatechange’ é indefinida…

N

Nesta função você cria um objeto ajax, mas ela não retorna nada e o objeto ajax é declarado como local:

function iniciaAjax(){  
        var ajax = null;  
        if(window.XMLHttpRequest){  
            ajax = new XMLHttpRequest();  
        }else if(window.ActiveXObject){  
            try{  
                ajax = new ActiveObject("Msxm12.XMLHTTP");  
            }catch(e){  
                ajax = new ActiveXObject("Microsoft.XMLHTTP");  
        }     
    }

Nesta função você faz a requisição:

/*Requisita a resposta ao servidor*/  
    function requisitar(url){  
        var ajax = iniciaAjax();  
        carregando(document.getElementById("resposta"));  
        ajax.onreadystatechange = function(){  
        //status=200, statusText=OK, responseText, responseXML  
            if(ajax.readystate == 4){  
                mostrar(ajax);  
            }  
        }  
        ajax.open("POST", url);  
        ajax.send(null);  
    }

O erro acontece aqui:

porque o objeto ajax é indefinido.

Fazer com que a função iniciaAjax retorne o objeto que está criando já deve resolver o problema.

N

Mais uma, a propriedade readState não existe nos objetos ajax.
Use readystate.

W

natanaelv:
Nesta função você cria um objeto ajax, mas ela não retorna nada e o objeto ajax é declarado como local:

function iniciaAjax(){  
        var ajax = null;  
        if(window.XMLHttpRequest){  
            ajax = new XMLHttpRequest();  
        }else if(window.ActiveXObject){  
            try{  
                ajax = new ActiveObject("Msxm12.XMLHTTP");  
            }catch(e){  
                ajax = new ActiveXObject("Microsoft.XMLHTTP");  
        }     
    }

Nesta função você faz a requisição:

/*Requisita a resposta ao servidor*/  
    function requisitar(url){  
        var ajax = iniciaAjax();  
        carregando(document.getElementById("resposta"));  
        ajax.onreadystatechange = function(){  
        //status=200, statusText=OK, responseText, responseXML  
            if(ajax.readystate == 4){  
                mostrar(ajax);  
            }  
        }  
        ajax.open("POST", url);  
        ajax.send(null);  
    }

O erro acontece aqui:

porque o objeto ajax é indefinido.

Fazer com que a função iniciaAjax retorne o objeto que está criando já deve resolver o problema.

Claro só faltou um ‘return ajax’ ali, puts que vacilo sabia que tinha esquecido de algum detalhe

vlw ai, abraço

Criado 21 de fevereiro de 2013
Ultima resposta 22 de fev. de 2013
Respostas 10
Participantes 3