• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Drone

Javascript after ajax!

7 mensagens neste tópico

Boas pessoal

É o seguinte se eu colocar por exemplo

Ficheiro teste.php:

<script type="text/javascript">alert('xpto')</script>

E no ficheiro index.php fizer uma chamada de AJAX do ficheiro teste.php ele nao executa o javascript que esta no ficheiro (neste caso o alert())

Ja andei a volta disto e nao consigo resolver esta porra:S

Se alguem souber ajudar agradeço!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

experimenta a colocar <script language="javascript" type="text/javascript" defer>alert('xpto')</script>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No teste.php mete só o alert() e depois, pegas no resultado da chamada do ajax e fazes eval(oqueveio);

É muito inseguro, mas serve...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o ajax não processa instruções de javascript tens na net vários exemplos de como fazer o parse de javascript enviado por ajax

pergunta ao google ele de certeza que sabe como é!

eu uso esta função (que saquei já não se de onde) sobre o httprequest que recebo para fazer o parse do js

as variáveis globais têm que ser declaradas sobre o objecto window ou outro qualquer que seja global e definido antes de receberes os httprequest ou não vais ter acesso a elas

(ex: window.sizeID = 30 )

function parsejava(content) {
         var search = content;
         var script ;
         
         var is_singleq = 0; var singleq = "'";
         var is_doubleq = 0; var doubleq = '"';
         var is_escaped = 0; var escap = "\\";
         var layer = 0;
               
         while( script = search.match(/(<script[^>]+javascript[^>]+>\s*(<!--)?)/)) {
            search = search.substr(search.indexOf(RegExp.$1) + RegExp.$1.length);
            if (!(endscript = search.match(/((-->)?\s*<\/script>)/))) break;
            block = search.substr(0, search.indexOf(RegExp.$1));
            search = search.substring(block.length + RegExp.$1.length);
            
            while(func = block.match(/(function(.+?)\((.*?)\)\s*\{)/)) {
               eval(block.substr(0,block.indexOf(RegExp.$1)));
               // for evaluating non functions
               
               block = block.substr(block.indexOf(RegExp.$1) + RegExp.$1.length);
               name = RegExp.$2;
               param = RegExp.$3;
               
               is_singleq = 0;
               is_doubleq = 0;
               is_escaped = 0;
               layer = 0;
               
               
               for(i=0;i<block.length;i++) {
                  c = block.substr(i,1);
                  
                  if ((is_singleq || is_doubleq) && is_escaped) {
                     is_escaped = 0;
                  } else if (!is_doubleq && (c==singleq)) {
                     is_singleq = !is_singleq;
                  } else if (!is_singleq && (c==doubleq)) {
                     is_doubleq = !is_doubleq;
                  } else if ((is_singleq || is_doubleq) && (c==escap)) {
                     is_escaped = 1;
                  } else if ( c=="{") {
                     layer++;
                  } else if ( c=="}") {
                     if ( layer==0 ) {
                        break;
                     }
                     layer--;
                  }
               }
               
               code = block.substr(0,i-1);
               block = block.substr(i +1);
               
               code = code.replace(/\n/g, '\\n');
               code = code.replace(/\r/g, '\\r');
               code = code.replace(/'/g,"\\'");
               
               eval(name + " = new Function('"+param+"','"+code+"');");
            }
            eval(block); // for evaluating non functions
         }
        
      } 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

  code = code.replace(/'/g,"\\'");

não devia ser   code = code.replace(/\'/g,"\\'"); ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não te faz mal nenhum teres \' mas não é necessário uma vez que o ' não tem nenhum significado especial para o objecto RegExp do js

É a minha opinião, mas como disse não fui eu quem criou a função e nunca olhei para ela com olhos de ver, funciona e pronto!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora