Erro na requisição do AJAX

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

up

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

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.

[quote=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.
[/quote]

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

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.

[quote=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.[/quote]

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

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…

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.

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

[quote=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.[/quote]

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

vlw ai, abraço