Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

SkyWalker.TO

AJAX :: Executando scripts dentro de uma pagina carregada com Ajax

Recommended Posts

olha soh galera... na boa, essa funcao eh bastante falha... reconheco seu trabalho para fazer, nao ficou ruim, mas ainda ta longe de ser boa...

 

primeiro problema (olhei assim q vi seu replace):

- image um codigo javascript assim:

 

<script type="text/javascript">document.write("<script> alert('aa'); </script>"); //olha a bronca</script>

seu "script parse" vai parar ali no meio do meu document.write()

 

bom, qto ao problema de funcoes citado, isso na verdade nao eh um problema, pois o eval realmente nao le funcoes, mas ele le atribuicoes, exemplo, vendo a funcao abaixo:

 

function minhaFuncao(arg1) {  //executa alguma coisa}

se voce tentar carregar isso via eval nao vai pegar mesmo, mas se voce fizer o seguinte:

 

minhaFuncao = function(arg1) {  //executa alguma coisa};

ai vai pegar, vale lembrar, se for fazer isso NAO COLOQUE o 'var' antes do nome minhaFuncao, se voce colocar o var antes, a funcao vai ser criada no escopo do eval, e so vai ser acessivel ao mesmo (enquanto funcoes normais tem escopo global e podem ser acessados de qualquer lugar)

 

e lembrando, usando atribuacao (da forma que eu mostrei), voce pode sobreescrever as funcoes que nao vai dar conflito de funcao, a que vale vai ser a ultima atribuida ;)

 

coletar o conteudo script seria mais facil usando a seguinte ER: (?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)

 

mas ainda esse ai acho que nao resolve o primerio problema que eu falei, eu ainda n tive tempo para implementar isso, mas vai a ideia pra quem quizer: use um sistema de pilha, adicione um valor a pilha a cada vez que for encontrado um "<script" e remova um item da pilha ao encontrar "</script>", pare o parser quando a pilha estiver zerada ;)

 

flws

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal estou tendo este problema de precisar executar codigos javascript dentro de uma página carregada através do ajax e não ter como fazer. Pesquisando na net encontrei este fórum e vi que este tópico seria a resposta para meus problemas, mas infelizamente não funcionou, quando eu clico no link que chama a funcão nada acontece, a instrução de chamada do ajax para de funcionar. abaixo vou mandar o codigo original ( o que esta funcionando, porém não permite que execute nada de js ) e o codigo modificado que fiz com base neste topico e com a contribuição de outros colegas de outros topicos.

 

AJAX ORIGINAL

//INICINADO MODULOS DE VALIDAÇÃO DE CATEGORIAfunction loadXMLDoc15(url){req = null;if (window.XMLHttpRequest) { req = new XMLHttpRequest(); req.onreadystatechange = processReqChange15; req.open("GET", url, true);  req.send(null);} else if (window.ActiveXObject) {try {req = new ActiveXObject("Msxml2.XMLHTTP.4.0");} catch(e) {try {req = new ActiveXObject("Msxml2.XMLHTTP.3.0");} catch(e) {try {req = new ActiveXObject("Msxml2.XMLHTTP");} catch(e) {try {req = new ActiveXObject("Microsoft.XMLHTTP");} catch(e) {req = false;}}}}if (req) {   req.onreadystatechange=processReqChange15;   req.open("GET",url,true);   req.send();}}}function processReqChange15(){if (req.readyState == 4) {if (req.status == 200) {document.getElementById("div").innerHTML = req.responseText;} else {alert("Houve um problema ao obter os dados:\n" + req.statusText);}}}function carregando(valor){loadXMLDoc15("carregando.php?id="+valor);}

AJAX MODIFICADO COM BASE NO TOPICO

function extraiScript(texto){	var ini, pos_src, fim, codigo;	var objScript = null;	ini = texto.indexOf('<script', 0)	while (ini!=-1){		var objScript = document.createElement("script");		//Busca se tem algum src a partir do inicio do script		pos_src = texto.indexOf(' src', ini)		ini = texto.indexOf('>', ini) + 1;		//Verifica se este e um bloco de script ou include para um arquivo de scripts		if (pos_src < ini && pos_src >=0){//Se encontrou um "src" dentro da tag script, esta e um include de um arquivo script			//Marca como sendo o inicio do nome do arquivo para depois do src			ini = pos_src + 4;			//Procura pelo ponto do nome da extencao do arquivo e marca para depois dele			fim = texto.indexOf('.', ini)+4;			//Pega o nome do arquivo			codigo = texto.substring(ini,fim);			//Elimina do nome do arquivo os caracteres que possam ter sido pegos por engano			codigo = codigo.replace("=","").replace(" ","").replace("\"","").replace("\"","").replace("\'","").replace("\'","").replace(">","");			// Adiciona o arquivo de script ao objeto que sera adicionado ao documento			objScript.src = codigo;		}else{//Se nao encontrou um "src" dentro da tag script, esta e um bloco de codigo script			// Procura o final do script			fim = texto.indexOf('</script>', ini);			// Extrai apenas o script			codigo = texto.substring(ini,fim);			// Adiciona o bloco de script ao objeto que sera adicionado ao documento			objScript.text = codigo;		}		//Adiciona o script ao documento		document.body.appendChild(objScript);		// Procura a proxima tag de <script		ini = texto.indexOf('<script', fim);		//Limpa o objeto de script		objScript = null;	}}function loadXMLDoc15(url){req = null;if (window.XMLHttpRequest) { req = new XMLHttpRequest(); req.onreadystatechange = processReqChange15; req.open("GET", url, true);  req.send(null);} else if (window.ActiveXObject) {try {req = new ActiveXObject("Msxml2.XMLHTTP.4.0");} catch(e) {try {req = new ActiveXObject("Msxml2.XMLHTTP.3.0");} catch(e) {try {req = new ActiveXObject("Msxml2.XMLHTTP");} catch(e) {try {req = new ActiveXObject("Microsoft.XMLHTTP");} catch(e) {req = false;}}}}if (req) {   req.onreadystatechange=processReqChange15;   req.open("GET",url,true);   req.send();}}}function processReqChange15(){if (req.readyState == 4) {	texto=unescape(xmlhttp.req.responseText.replace(/\+/g," "));	document.getElementById("div").innerHTML = texto;	extraiScript(texto);}}function carregando(valor){		 loadXMLDoc15("carregando.php?id="+valo);}

No codigo php chamo esta função que esta no arquivo ajax.js através da seguinte chamada.

<a href="#" onclick="carregando(10)">Listagem</a>

 

Se eu uso o ajax original (1 exemplo) funciona, busca a pagina como eu solicitei e talz

se eu usar os passos como descritos no forum o ajax nem busca a página que eu quero quando clico no link !

 

onde eu estou errando ? me ajudem ae pessoal, estou agarrado neste módulo !!!! http://forum.imasters.com.br/public/style_emoticons/default/upset.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ai pessoal, sou novo no fórum e tb novo no AJAX, mas tive dando uma olha no código e quis dar um help para a galera então ai vai o que eu fiz,e aqui rolou certinho.

 

//---- Código em Js ----//function extraiScript(texto){//Maravilhosa função feita pelo SkyWalker.TO do imasters/forum//http://forum.imasters.com.br/index.php?showtopic=165277	// inicializa o inicio ><	var ini = 0;	// loop enquanto achar um script	while (ini!=-1){		// procura uma tag de script		ini = texto.indexOf('<script', ini);		// se encontrar		if (ini >=0){			// define o inicio para depois do fechamento dessa tag			ini = texto.indexOf('>', ini) + 1;			// procura o final do script			var fim = texto.indexOf('</script>', ini);			// extrai apenas o script			codigo = texto.substring(ini,fim);			/**********************						* Alterado por Micox - micoxjcg@yahoo.com.br			* Alterei pois com o eval não executava funções.						* Alterado por Everton D. Silva - everton.silva@streamingshop.com.br			* não estava retornando o valor			***********************/			var novo = document.createElement('script');	novo.type 		= 'text/javascript';	novo.language	= 'javascript';	novo.text = codigo;	document.body.appendChild(novo);		}	}}function loadXMLDoc15(url) { 	req = null;	loc = "compila"; // Nome da div	texto = null;		// Procura por um objeto nativo (Mozilla/Safari) 	if (window.XMLHttpRequest) { 		req = new XMLHttpRequest(); 		req.onreadystatechange = processReqChange15; 		req.open("GET", url, true); 		req.send(null); 	// Procura por uma versao ActiveX (IE) 	} else if (window.ActiveXObject) { 		req = new ActiveXObject("Microsoft.XMLHTTP"); 		if (req) { 			req.onreadystatechange = processReqChange15; 			req.open("GET", url, true); 			req.send();					} 	} } function processReqChange15() { 		// apenas quando o estado for "completado" 	if (req.readyState == 4) { 		texto = unescape(req.responseText.replace(/\+/g," "));				extraiScript(texto);					} }function carregando(valor){	loadXMLDoc15("testeAjax.asp?id="+valor);}

// --- Inicio do HTML --- //

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Ajax</title><script type="text/javascript" language="javascript" src="ajax.js"></script></head><body><a href="java script:;" onclick="carregando('Você fez um AJAX');">Escreve mensagem</a><br /><br /><br /><div id="compila" style="display:none;">	<!-- só vai servir para complicar a página --></div><br /><br /><div id="doc" style="width:500px; height:250px; background:#CCCCCC; border:solid 1px #0000CC;">	<!-- Aqui será mostrado o valor do script --></div></body></html>

// --- Página ASP que tem o script --- //

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%><%Response.Charset = "ISO-8859-1" Response.Buffer=trueResponse.AddHeader "cache-control", "private"Response.AddHeader "pragma", "no-cache"Response.ExpiresAbsolute = #January 1, 1990 00:00:01#Response.Expires=Now()-1Response.AddHeader "Cache-Control", "must-revalidate"Response.AddHeader "Cache-Control", "no-cache"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Untitled Document</title><%	id = Request.QueryString("id")%><script>function escreve(){	document.getElementById('doc').innerHTML = '<%=id%>';}escreve()</script></head><body>	 </body></html>

E isso ai pessoal, espero ter ajudado a resolver....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou com essa dúvida!! bom estou primeiramente testando,Ajax

 

eu tenho esse script em ajax com php para fzer uma pesquisa no db

e traser na masma página inicio.html o resultado instantaneamente!! enquando ainda o usuario esta dizitando o nome para busca "sem refresh"!! tem um erro ai eu não estou sabendo qual é ou se tiver um jeito melhor de fazer!! me ajudem Please!!!

 

arquivo inicio.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Minha Primeira Pesquisa com Ajax</title>
</head>

<body>

<script type="text/javascript" language="javascript">

//var XMLHttp=null;
function criaXMLHttp(){
	var XMLHttp;
	try{
		XMLHttp = new XMLHttpRequest();
	   }
	catch(e){
		try{
			XMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
			
			}
		}
	 catch(e){
		 
		 XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
		 }
	
	return XMLHttp;
	}
	
function executaXMLHttp(){
	 XMLHttp=criaXMLHttp();
	var par = document.inicio.getElementById("parametro").value;
	var resul = document.inicio.getElementById("resultado");
	
	var url =  "realiza.php?idparam="+par;
	
	 XMLHttp.open("GET",url,true);
			   
	 
	 XMLHttp.onreadystatechange=function(){
		 if( XMLHttp.readyState==4){
			 //alert('vai funcionar'); 
			 resul.innerHTML = XMLHttp.responseText;
			
			 }
		   else{
			 alert('Erro Fatalit/Babalit/friendship');
			   }
		 }
	
	XMLHttp.send(null);
	}	

</script>


  <strong>Digite um nome</strong>
  <form name="inicio"> 
  <input name="parametro" type="text" id="parametro" size="35" onKeyup= "executaXMLHttp();" />
</form>

<p align="center" id="resultado"></p>

</body>
</html>


arquivo realiza.php

<?
header("Content-Type: text/plain");
include("conexao.php");
$id = $_GET['idparam'];


$sql_exe = mysql_query("SELECT * FROM $tabs WHERE nome LIKE '$id%'",$conexao)or die(mysql_error());
$rows = mysql_num_rows($sql_exe);
	if($rows==0){
		print "<font color='#ff0000'>Nome Não encotrado</font>";
	
	}
	else{
	while($resul = mysql_fetch_array($sql_exe)){
		print $resul['nome']."\t\t".$resul['endereco']."<br>";	
	
		}
	
	}
?>

desde já agradeço!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola pessoal eu utilizo ajax. E quero usar um scripts Thickbox dentro de uma pagina carregada com Ajax.

Mas nao consigo fazelo funcionar pois as imagens so abre em na mesma pagina.

se alguem poder me ajudar.

ficarei grato.

Meu codigo que abre as paginas em ajax.

// JavaScript Document
function ObjAjax(){
  try{return new XMLHttpRequest()}
  catch(e){try{return new ActiveXObject("Msxml2.XMLHTTP")}
  catch(e){return new ActiveXObject("Microsoft.XMLHTTP")}}
  return null;
}

function navegar(page){
  ajax = new ObjAjax();
  var div = document.getElementById("Conteudo");

  ajax.onreadystatechange = function(){
    if(ajax.readyState == 1){div.innerHTML="<center><br><img src='_img/ajax_preloader.gif'><p><div class='Fonte1'>Carregando a Página.</div></p></br></center>";}
    if(ajax.readyState == 4){div.innerHTML=ajax.responseText;}

  }
  ajax.open("GET",page,true);
  ajax.send(null);
}
se alguem poder me ajudar ficarei grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta função não está funcionando no Google Chrome!

 

Testei no FF e deu com sucesso.

 

Alguém ajuda aí a fazer funcionar no Google Chrome? Pois maioria dos acessos no meu site o povo usa ele.. :S

 

 

A função está assim:

function extraiScript(texto){
       var ini, pos_src, fim, codigo;
       var objScript = null;
       ini = texto.indexOf("<script", 0)
       while (ini!=-1){
               var objScript = document.createElement("script");
               //Busca se tem algum src a partir do inicio do script
               pos_src = texto.indexOf("src", ini)
               ini = texto.indexOf(">", ini) + 1;
               //Verifica se este e um bloco de script ou include para um arquivo de scripts
               if (pos_src < ini && pos_src >= 0){//Se encontrou um "src" dentro da tag script, esta e um include de um arquivo script
                       //Marca como sendo o inicio do nome do arquivo para depois do src
                       ini = pos_src + 4;
                       //Procura pelo ponto do nome da extencao do arquivo e marca para depois dele
                       fim = texto.indexOf('.', ini)+4;
                       //Pega o nome do arquivo
                       codigo = texto.substring(ini,fim);
                       //Elimina do nome do arquivo os caracteres que possam ter sido pegos por engano
                       codigo = codigo.replace("=","").replace(" ","").replace("\"","").replace("\"","").replace("\'","").replace("\'","").replace(">","");
                       // Adiciona o arquivo de script ao objeto que sera adicionado ao documento
                       objScript.type = "text/javascript";
                       objScript.async = true;
                       objScript.src = codigo;
               }else{//Se nao encontrou um "src" dentro da tag script, esta e um bloco de codigo script
                       // Procura o final do script
                       fim = texto.indexOf('</script>', ini);
                       // Extrai apenas o script
                       codigo = texto.substring(ini,fim);
                       // Adiciona o bloco de script ao objeto que sera adicionado ao documento
                       objScript.text = codigo;

               }

               //Adiciona o script ao documento
               document.body.appendChild(objScript);

               // Procura a proxima tag de <script
               ini = texto.indexOf('<script', fim);

               //Limpa o objeto de script
               objScript = null;
       }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

boa isso que você fez, meu deu até uma idéia de um esquema que eu queria fazer a um tempo atras, mas não tinha idéia de como fazer hehehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

carrego uma pagina ocm ajax.

seguinte

<script>

function enviar(url, params, target) {
 if (window.XMLHttpRequest) {
   req = new XMLHttpRequest();
 } else if (window.ActiveXObject) {
   req = new ActiveXObject("Microsoft.XMLHTTP");
 }
 if (req != undefined) {
   req.open("POST", url, true);
   req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   req.setRequestHeader("Content-length", params.length);
   req.setRequestHeader("Connection", "close");
   req.onreadystatechange = function() {
if(req.readyState == 4 && req.status == 200) {
	document.getElementById(target).innerHTML = req.responseText;
}
   }
   req.send(params);
 }
}
function ahah(url, target) {
 document.getElementById(target).innerHTML = ' Carregando...';
 if (window.XMLHttpRequest) {
   req = new XMLHttpRequest();
 } else if (window.ActiveXObject) {
   req = new ActiveXObject("Microsoft.XMLHTTP");
 }
 if (req != undefined) {
   req.onreadystatechange = function() {ahahDone(url, target);};
   req.open("GET", url, true);
   req.send("");
 }
}  

function ahahDone(url, target) {
 if (req.readyState == 4) { // only if req is "loaded"
   if (req.status == 200) { // only if "OK"
     document.getElementById(target).innerHTML = req.responseText;
   } else {
     document.getElementById(target).innerHTML=" Erro:\n"+ req.status + "\n" +req.statusText;
   }
 }
}

function load(name, div) {
ahah(name,div);
return false;
}

</script>

 

Não carregar os js de jeito nenhum detro das paginas carregadas com ajax como resolver?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.