Duvida js e ajax

é 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 :smiley:

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 :frowning:

o que vc ta tentando fazer não vai rolar, pelo menos, nunca rolou comigo quando eu quis fazer :frowning:

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 :smiley:

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 :smiley:

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 :smiley:

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 :frowning:

o que vc ta tentando fazer não vai rolar, pelo menos, nunca rolou comigo quando eu quis fazer :frowning:

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 :smiley:

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 :smiley:

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!