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.
[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