é o mesmo codigo q vc usou pro exemplo…
axo q o params ta vindo em branco
Olá diegonogueira!
Quando vc clica no notão para aparecer o texto sem o javascript, ele funciona?
fiz uns testes rapidos aqui e funcionou de boa o código que vc postou da primeira vez
Com relação ao arquivo com JS:
o que acontece é que o navegador não executa o seu quando vc usa um p.innerHTML, isso porque o engine de JS do seu navegador já analisou a página no momento do document.load e o que é adicionado de tag no documento depois disso, é descartado
o que vc ta tentando fazer não vai rolar, pelo menos, nunca rolou comigo quando eu quis fazer
Para executar tags scripts vindas por ajax, vc vai ter que analizar o texto que vc recebeou do servidor (a sua pagina textoJS.php) e retirar/obter a tag e seu conteudo,
dai com o conteudo da tag script em mãos (ou seja, o codigo js em forma de texto puro), vc vai ter que executar a função eval(“seu texto/script aqui”)
só assim vai funcionar
mas isso que vc ta tentando fazer (executar um script vindo do ajax) ninguem faz, é muito tosco e porco, principalmente um document.write(), use o proprio print do PHP para isso…
outra alternativa ao eval() é requisitar um documento JS e adicioná-lo ao da sua página… mas isso requer um pouco de esperiencia em javascript…
se estiver precisando muito disso para o seu trampo, a gente pode criar um aqui se quiser
Cara você está estudando ajax, não sei se te ajuda, mas coloquei os códigos comentados de uma aplicação simples para auxiliar quem está estudando:
A aplicação muito zuada:
http://presenteperfeito.99k.org/blog/ajax/form2.php
O formulário, com chamadas a funções ajax em outro arquivo javascript local (na mesma máquina do usuário, nada de php gerando)
http://presenteperfeito.99k.org/blog/ajax/form2_php1.html
O javascript que possui a função enviarForm();
Essa função enviarForm(); é o envio de dados do formulário em ajax
http://presenteperfeito.99k.org/blog/ajax/sc_1html.html
O processar3.php envia em formato texto:
http://presenteperfeito.99k.org/blog/ajax/processar3_html1.html
Fiz de uma maneira que ele envia respostas mesmo sem ter o formulário:
http://presenteperfeito.99k.org/blog/ajax/processar3.php
Claro que é muito zuado, por que quando estava aprendendo, não tinha ideia do que colocar
O processar2:
http://presenteperfeito.99k.org/blog/ajax/processar2_html1.html
http://presenteperfeito.99k.org/blog/ajax/processar2.php
Processar
http://presenteperfeito.99k.org/blog/ajax/processar_html1.html
http://presenteperfeito.99k.org/blog/ajax/processar.php
Quando o cara está estudando é normal ficar meio perdido mesmo …!
Não sei se isso ai acima lhe ajuda…
tomara que sim …!
[quote=thiagof]Olá diegonogueira!
Quando vc clica no notão para aparecer o texto sem o javascript, ele funciona?
fiz uns testes rapidos aqui e funcionou de boa o código que vc postou da primeira vez
Com relação ao arquivo com JS:
o que acontece é que o navegador não executa o seu quando vc usa um p.innerHTML, isso porque o engine de JS do seu navegador já analisou a página no momento do document.load e o que é adicionado de tag no documento depois disso, é descartado
o que vc ta tentando fazer não vai rolar, pelo menos, nunca rolou comigo quando eu quis fazer
Para executar tags scripts vindas por ajax, vc vai ter que analizar o texto que vc recebeou do servidor (a sua pagina textoJS.php) e retirar/obter a tag e seu conteudo,
dai com o conteudo da tag script em mãos (ou seja, o codigo js em forma de texto puro), vc vai ter que executar a função eval(“seu texto/script aqui”)
só assim vai funcionar
mas isso que vc ta tentando fazer (executar um script vindo do ajax) ninguem faz, é muito tosco e porco, principalmente um document.write(), use o proprio print do PHP para isso…
outra alternativa ao eval() é requisitar um documento JS e adicioná-lo ao da sua página… mas isso requer um pouco de esperiencia em javascript…
se estiver precisando muito disso para o seu trampo, a gente pode criar um aqui se quiser :D[/quote]
É ai tranquilo?
O codigo funciona, a parte html e php, o problema é o js. Já me falaram algumas vezes que isso não é uma boa prática,
mais é que pra funcionar o que preciso, tem q ser dessa forma, forma suja rsrsrs…
Preciso rodar o js via ajax, e esses js nem vão tá no mesmo servidor, mais to tentando, aprendendo, ralando, tudo ao mesmo tempo pra tentar fazer funcionar.
Quando chamo o inner.html ele não roda mais js? Qual sua sugestão para poder funcionar o js que ta no arquivo textoJS.php dentro daquela div painel…
Agradeço desde já, obrigado
function recebe(msg) {// Função que recebe a mensagem do servidor de transferencia e insere seu conteudo na área "painel"
P = document.getElementById("painel");
P.innerHTML = msg;
URL_ATUAL = tmpUrl;
PARAMS_ATUAL = tmpParams;
alert(eval(msg));
}
A variavel msg vem com todo o codigo da textoJS.php, se der um alert exibe tudo como texto.
Tem alguma forma de pegar a parte de js que ta como texto nessa variavel e fazer ela funcionar?
Tem mta gente nesse fórum que tem muito conhecimento mas infelizmente eh mto arrogante e prepotente… infelizmente esses não ajudam efetivamente na resolução de um problema… hoje é esse usuário que está com problemas e não conhece bem o ambiente legado em que as empresas nos colocam… sistemas que mais parecem colcha de retalhos… e esse é o cenário de grande parte das empresas… gerentes ou superiores que simplesmente querem que façamos de uma determinada forma e não da forma correta…
já que esses superiores querem gambiarras, ajudamos nosso colega a fazer essas gambiarras, por mais porcas que possam ser, mas não precisamos estressar por besteira… adicionei esse colega no msn e estou tentando entender melhor o problema pra poder ajudar… quem sabe mais gente daki possa fazer o msm…
Abs…
cara pega o firefox e usa o debug dele, 'firebug’
vai linha por linha e veja os erros, tem console, tem adicionar observador
assim fica mais fácil vc achar os erros
[quote]
diegonogueira
A variavel msg vem com todo o codigo da textoJS.php, se der um alert exibe tudo como texto.
Tem alguma forma de pegar a parte de js que ta como texto nessa variavel e fazer ela funcionar? [/quote]
tenta o seguinte:
[code]function recebe(msg) {
/* essa expressao regular vai pegar o codigo JS dentro da msg /
var er = new RegExp(/.+?</script>/);
var scriptCode = er.exec(msg);
if(scriptCode != null) {
scriptCode = scriptCode.replace(/<//?script>/gim, “”); / remove as tags /
alert(scriptCode) / so para verificar se ta pegando o js corretamente /
eval(scriptCode); / executa o JS */
}
P = document.getElementById("painel");
P.innerHTML = msg;
URL_ATUAL = tmpUrl;
PARAMS_ATUAL = tmpParams;
} [/code]
coloquei uma expressão regular ali em cima para pegar o seu codigo JS dentro da msg e um alert() para ver se tá pegando o código corretamente…
só não sei como vc vai fazer para executar um document.write() no ponto exato que quer, mas faz o teste, tenta por uns alerts() na pagina textoJS.php para ver se o script é executado blz?
Não testei o código ainda, mas tenta ai para ver se dá blz
Não sei se é exatamente isso que você quer …
http://presenteperfeito.99k.org/blog/ajax/ajax.html
O Colega Thiago, de outra solução que é tirar o que está antes <script>no meio</script>
e depois de script e executar somente o que está no meio de <script>no meio</script>
com o eval();
Eu pensei em colocar em um array
array[0] o código html e array[1] o código js
Não se acostume, não respondo mais com o código completo
ajax.html:
[code]
Documento simples para testar o recebimento de código js, bem como apenas texto #tudo { width:1004px; margin-left:auto; margin-right:auto; } #princ { float:left; width:inherit; background-color:#CCC } #cab { width:inherit; height:100px } #nav { width:inherit; height:30px } #menu { width: 200px;float:left } #painel { width:800px; float:left; background-color:#FAFAFA } #rodape { float:left; width:1000px; height:40px; } .menuItem { min-height:30px; background-color:#FFC; vertical-align:middle; display:block; width:inherit; text-align:left; border:none; cursor:pointer; margin-bottom:2px } .novoLink { cursor:pointer; color:#00C } </head>
<body >
<div id="tudo">
<div id='princ'>
<div id='cab'>
<p>Cabecalho</p>
</div>
<div id='nav'>
<p>Nevagação principal</p>
</div>
<div id='menu'>
<h3>Menu esquerdo</h3>
<button class='menuItem' onClick='ajaxSOTEXTO("soTexto.php")' id="Sotexto">Só texto</button>
<button class='menuItem' onClick='ajax("textoJS.php")' id="javascript">texto com javascript</button>
<!-- Note que para o botão só texto eu chamo a função jaxSOTEXTO( ) e para javascript chamo
ajax()
isso é por que eu trato os dados do servidor de maneira diferente
se é para executar javascript terei que mandar de uma forma diferente
-->
</div>
<hr>
<div id='painel' >
<p>Area de aplicação</p>
</div>
<div id='rodape'>
<p>Rodape</p>
</div>
</div>
</div>
</body>
[/code]
/textoJS.php
[code]
<?php
echo "a1 = new Array(\"ok executou html na div
\",\"window.alert(' Servidor mandou sting js');\");"; /*para que nosso código funcione sou obrigado a mandar no formato a1 = new Array("código html", "código javascript"); Sou obrigado por que eu tratei assim nos js, poderia mandar através de JSON, , conforme o gosto do fregues, mas se mando de maneiras diferentes trato de maneiras diferentes no meu js Mas como decidi mandar assim array["codigo html", "codigo js"], mando assim e trato assim no recebe( ) do ajax.js */ ?>[/code]soTexto.php
[code]
<?php echo "Ok está enviando somente texto"; echo "Valores passados no array $_REQUEST
"; print_r($_REQUEST); /*aqui como ate o momento não sei como codificar os caracteres em iso-8859-1, sou obrigado a escrever o a com acento assim á printo os valores do $_REQUEST com print_r($_REQUEST); Na verdade isso não precisa, mas em fim normalmente é necessário fazer algo com o que recebe do cliente esse algo está no $_REQUEST['campo1', 'campo2', ...] */ ?>[/code]
E finalmente o ajax.js:
[code]
// JavaScript Document
/!
* xmlhttp.readyState == 0 - Não iniciado (Uninitialised)
* xmlhttp.readyState == 1 - Carregando (Loading)
* xmlhttp.readyState == 2 - Carregado (Loaded)
* xmlhttp.readyState == 3 - Interativo (Interactive)
* xmlhttp.readyState == 4 - Completado (Completed)
* xmlhttp.status == 200 - ok || xmlhttp.status == 404 - objeto não encontrado
* Essas variáveis, REQ_FIM e REQ_OK , servem apenas para ficar mais lógico o status do ajax
!/
var request = false;
var REQ_FIM = 4;
var REQ_OK = 200;
var campos=“campo1=”+“esseEUmCampo1”+"&"+“campo2”+"="+“esseEhOcampo2”;
/! Essa variável campos, não é usada mas se todos os dados dos formulários poderiam estar nela separados por &, como sugere ali, ela é uma string que conteria todos os campos!/
function stateChangeListener() { //Funcao ativada a cada mudanca de status na comunicacao com o servidor de transferencia
if (request.readyState != REQ_FIM) {
return;
}
if (request.status == REQ_OK) {
recebe(request.responseText);
request=false;
}
return;
}
/! Função que é chamada quando muda o status da comunicaçãod o ajax, essa especificamente só é chamada pelo ajax do botão Só texto, id=“Sotexto” !/
function stateChangeListenerSOTEXTO() { //Função ativada a cada mudança de status na comunicação com o servidor de transferencia
if (request.readyState != REQ_FIM) {
return;
}
if (request.status == REQ_OK) {
/* ok se os dados chegaram do servidor, chama a função recebeSOTEXTO(request.responseText); request.responseText contém os dados chegaram do servidor*/
recebeSOTEXTO(request.responseText);
request=false;
}
return;
}
function ajaxSOTEXTO(url,params) {
if(window.XMLHttpRequest) {
request = new window.XMLHttpRequest();
} else if (window.ActiveXObject) {
request = new window.ActiveXObject('Microsoft.XMLHTTP');
}
if(request) {
request.onreadystatechange = stateChangeListenerSOTEXTO;
request.open("GET", url+'?'+campos, true);
request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
if (typeof params == "undefined") {
request.send();
} else {
request.send(null);
/*como estou passando por GET não devo enviar os dados por aqui, pois eles já estão na url*/
}
}
}
function ajax(url,params) {// Função que envia a url e seus parametros para o servidor de transferencia (AJAX)
if(window.XMLHttpRequest) {
request = new window.XMLHttpRequest();
} else if (window.ActiveXObject) {
request = new window.ActiveXObject('Microsoft.XMLHTTP');
}
if(request) {
request.onreadystatechange = stateChangeListener;
request.open("POST", url, true);
request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
if (typeof params == "undefined") {
request.send();
} else {
request.send(params);
}
}
}
/*! função que recebe os dados do servidor e coloca na div além de executar o javascript passado no array!*/
function recebe(msg) {
var P = document.getElementById("painel");
if(typeof msg=="undefined")
{
eval(msg);
document.getElementById("painel").insertAdjacentHTML('beforeend', msg);
}else
{//se é um array a1["<p>ok executou html na div</p>", "window.alert(' Servidor mandou sting js');"] obrigatoriamente te que ser o html e msg[1] o código javascript, mas não verifico se realmente é se mandar errado da pau
//torna a string que veio do servidor um código js, ela deixa de ser string e passa a ser código
//estamos esperando que seja:
//a1 = new Array("<p>ok executou html na div</p>","window.alert(' Servidor mandou sting js');");
//não faço nenhum tipo de teste nem controle de erro aqui para funcionar
// obrigatoriamente a string que o servidor mandar tem que ser
//a1 = new Array("código Html", "código javascript");
//necessariamente nessa ordem
eval(msg);
/* como a1[1]) também é uma string de código js, eu faço ela efeticamente virar um código com o eval */
eval(a1[1]);
document.getElementById("painel").insertAdjacentHTML('beforeend', a1[0]);//concateno a1[0] ao último elementodo div
document.getElementById("painel").insertAdjacentHTML('beforeend', "Javascipt passado em a[1]:<br />");//concateno ao último elementodo div
document.getElementById("painel").insertAdjacentHTML('beforeend', a1[1]);//concateno a1[1] ao último elementodo div
document.getElementById("painel").insertAdjacentHTML('beforeend', "<br />");//concateno ao último elementodo div
}
}
function recebeSOTEXTO(msg) {
document.getElementById("painel").insertAdjacentHTML('beforeend', msg); //concateno o que veio do servidor ao último elementodo div
}[/code]
Bom está inteirinho ai, para quem está começando a estudar ajax, para saber ao menos como começar …
Como está no fórum, nem adianta tentar dizer que entendeu sem entender, então estuda entende e faça o seu …
Ah aprenda a utilizar firebug, google developer tools, o debug do ie, comece apertanto F12, se não sabe como verificar qual é o valor de uma variável no firebug, pergunte para alguém de preferência pessoalmente!