Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá amigos!
Por acaso alguem ja tentou carregar uma pagina externa com ajax e ja se deparou que os java script's que contem na pagina externa não se executam?
Pois é, pra ficar mais facil de entender ai vai um exemplo
O funcionamento do código é o seguinte
exemplo.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Teste com AJAX</title><script type="text/javascript" src="ajax.js"></script></head><body onload="pagina('inicial.php');"> <div id="conteudo"></div></body></html>
Repare que a lib do AJAX é carregada pela pagina principal, e ao carregar a pagina chamamos a pagina "inicial.php" para ser exibida dentro do div "conteudo"
para quem se interessa em como funciona a lib de ajax ai está ela
ajax.js
// Verificando se o browser tem suporte ajaxtry{ ajax = new ActiveXObject("Microsoft.XMLHTTP");} catch(e){ try { ajax = new ActiveXObject("Msxml2.XMLHTTP"); } catch(ex) { try { ajax = new XMLHttpRequest(); } catch(exc) { alert("Esse browser não tem recursos para uso do Ajax"); ajax = null; } }}// Mensagem "Carregando"carregando = '<img src="imagem/carregando.gif" align="absmiddle" /> Carregando';function pagina(n){ //se tiver suporte ajax if(ajax) { idCentral = document.getElementById("conteudo"); ajax.open("GET", "conteudo.php?pagina=" + n, true); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ajax.onreadystatechange = function() { if(ajax.readyState == 1) { idCentral.innerHTML = carregando; } if(ajax.readyState == 4) { var texto = ajax.responseText; texto = texto.replace(/\+/g," "); texto = unescape(texto); idCentral.innerHTML = texto; } } //Envia os comandos ajax.send(null); }}
Analisando o código reparem que a função "pagina" recebe o nome da pagina e a invoca pela pagina
conteudo.php
<?header("Content-Type: text/html; charset=ISO-8859-1",true);require("paginas/" . $_GET["pagina"]);?>
isso acontece por causa do seguinte cabeçalho
header("Content-Type: text/html; charset=ISO-8859-1",true);
Ele faz com que os caracteres voltem acentuados de acordo com o charset ISO-8859-1
Mas voltando ao assunto....
Até agora da pra intender que pela pagina "exemplo.php" invocamos a pagina "paginas/inicial.php"
paginas/inicial.php
Pagina inicial<script type="text/javascript" src="js.js"></script><p> <a href="java script:void(0);" onclick="return confirmar('Deseja confirmar essa mensagem e ir direto para a pagina do Google?', 'http://www.google.com.br');"> Clique aqui para testar a função "confirmar" </a></p>
Sucesso! até agora tudo tranquilo, mas repare o código da pagina invocada pelo ajax, essa ai em cima!
Viu que tem um script sendo incluido ai? o "js.js" ?
Então, o código fonte é esse aqui:
js.js
function confirmar (mensagem, link){ if (confirm(mensagem)) { window.location = link; } else { return false; }}
Nada de mais, apenas uma função com um alert de confirmação.
Tente executalo!
Não conseguiu?
Então, eu tambem não! Era pra conseguirmos executar a função "confirmar"
O erro que o debug do FF me retornou foi esse aqui:
Erro: confirmar is not definedArquivo-fonte: [http://www.leandromatos.com/imasters/exemplo.phpLinha: 1
Uma observação que eu fiz é que se a pagina "exemplo.php" tivese incluindo o arquivo "js.js" tudo funcionaria normal, repare cliando no lik, com um 2° exemplo:
Alguem tem alguma solução pra isso, lembrando que eu nao posso incluir nenhum JS na pagina inicial a nao ser a lib do ajax, todas as paginas invocadas tem que executar seus proprios java script's.
Um abraço galera!
Carregando comentários...