Ir para conteúdo
Fórum Script Brasil
  • 0

colocar código javascript dentro de um responseText


leocello

Pergunta

Olá,

Estou utilizando Ajax para colocar um conteúdo dentro de uma Div. Problema, em alguns casos, este conteúdo contém formulários, onde estou usando Spry para fazer a validação.

Eu consegui fazer funcionar da seguinte maneira:

Tenho o arquivo que contém os campos do formulário e outro arquivo que contém as funções do Spry que preciso chamar para fazer a validação. Esses arquivos são dinâmicos, pegando os dados dos campos e funções de um arquivo XML.

Na função que coloca o conteúdo dentro da div de conteúdos, ele coloca os dados do formulário em uma div e os dados do script em uma tag script criada utilizando createElement().

Ele funciona, mas o problema é que só funciona as vezes. Não funciona sempre.

O que pode ser que está acontecendo?

Alguém pode me ajudar, por favor?

Um abraço

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Olá mano,

me desculpe pela demora ao responder.

vou postar os códigos, com algumas explicações dos arquivos:

Arquivo: ajax.js

Este arquivo contém as funções que abrem o conteúdo via ajax. Não postei o arquivo inteiro, pois não é necessário.

Afunção getScriptAjax() somente serve para pegar arquivos que contenham somente códigos em Javascript. No arquivo tem uma outra função que pega conteúdos de arquivos HTML.

function ajaxobj()
{  
        try
        {  
                _ajaxobj = new ActiveXObject("Msxml2.XMLHTTP");  
        }
        catch (e)
        {  
                try
                {  
                        _ajaxobj = new ActiveXObject("Microsoft.XMLHTTP");  
                }
                catch (E)
                {  
                        _ajaxobj = false;  
                }
        }
        if (!_ajaxobj && typeof XMLHttpRequest!='undefined')
        {  
                _ajaxobj = new XMLHttpRequest();  
        }  
        return _ajaxobj;  
}

function getScriptAjax(arquivo,params,div,method)
{
        var Ajax;
        var conteudo;
        conteudo = '';
        Ajax = ajaxobj();
        Ajax.open(method, arquivo, true);
        Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");
        Ajax.onreadystatechange=function()
        {
                if (Ajax.readyState == 4)
                {  
                        // Mostramos o conteúdo 
                        var res = Ajax.responseText;
                        res = unescape(res);
                        var oScript = document.createElement('script');
                        oScript.type = 'text/javascript';
                        oScript.text = res;
                        document.getElementsByTagName("body").item(0).appendChild(oScript);
                }
                else
                {
                }
                
        };
        Ajax.send(params);
}
Arquivo: acoes.js Este arquivo contém as funções que, utilizando as funções do arquivo ajax.js, coloca os conteúdos nas páginas.
function novo(idtabela)
{
        getAjax("pages/dados/novo.phtml","tabela="+idtabela+"&id=0","dados","POST");
        getAjax("pages/dados/topo.phtml","acao=novo&tabela="+idtabela+"&id=0","topo_dados","POST");
        getScriptAjax("pages/dados/validacao.phtml","tabela="+idtabela+"&id=0","scripts","POST");
}
Arquivo validacao.phtml Este arquivo contém somente os scripts gerados para cada formulário do sistema. Estes scripts são gerados de acordo com um arquivo XML que contém as informações de cada campo de cada formulário. Os scripts gerados por esta página são scripts de validação de campos utilizando SPRY.
<?php 
//Arquivo de configuração com o AutoLoad das classes
require_once('../../config.php');

$bd_local = new BD_Conexao('local');

//Recebe as variáveis POST
$tabela = $_POST['tabela'];
$id = $_POST['id'];

if(file_exists('../../xml/forms/'.$tabela.'.xml'))
{

        // Lê o arquivo XML Forms.XML
        $xml = simplexml_load_file('../../xml/forms/'.$tabela.'.xml');
        
        foreach($xml->item as $item)
        {
                if($item->id == $tabela)
                {
                        foreach($item->campo as $campo)
                        {
                                if($campo->tipo != 'titulo')
                                {
                                        // Inicia as variáveis
                                        $nome = $campo->nome;
                                        $tipo = $campo->tipo;
                                        $tag = $campo->tag;
                                        $necessario = $campo->necessario;
                                        $atributos = 'isRequired:'.$necessario.', ';
                                        
                                        // Tag INPUT
                                        if($tag == 'input')
                                        {
                                                // Tipos
                                                // Tipo Texto
                                                if($tipo == 'texto')
                                                {
                                                        $spry_tipo = 'none';
                                                }
                                                // Tipo RG
                                                elseif($tipo == 'rg')
                                                {
                                                        $spry_tipo = 'custom';
                                                        $atributos .= 'format:"custom", ';
                                                        $atributos .= 'pattern:"00.000.000-0", ';
                                                        $atributos .= 'hint:"__.___.___-_", ';
                                                        $atributos .= 'useCharacterMasking:true, ';
                                                }
                                                // Tipo CPF
                                                elseif($tipo == 'cpf')
                                                {
                                                        $spry_tipo = 'custom';
                                                        $atributos .= 'format:"custom", ';
                                                        $atributos .= 'pattern:"000.000.000-00", ';
                                                        $atributos .= 'hint:"___.___.___-__", ';
                                                        $atributos .= 'useCharacterMasking:true, ';
                                                }
                                                // Tipo Data
                                                elseif($tipo == 'data')
                                                {
                                                        $spry_tipo = 'date';
                                                        $atributos .= 'format:"dd/mm/yyyy", ';
                                                        $atributos .= 'hint:"__/__/____", ';
                                                        $atributos .= 'useCharacterMasking:true, ';
                                                }
                                                // Tipo CEP
                                                elseif($tipo == 'cep')
                                                {
                                                        $spry_tipo = 'custom';
                                                        $atributos .= 'format:"custom", ';
                                                        $atributos .= 'pattern:"00000-000", ';
                                                        $atributos .= 'hint:"_____-___", ';
                                                        $atributos .= 'useCharacterMasking:true, ';
                                                }
                                                // Tipo Inteiro
                                                elseif($tipo == 'inteiro')
                                                {
                                                        $spry_tipo = 'integer';
                                                        $atributos .= 'useCharacterMasking:true, ';
                                                }
                                                // Tipo Telefone
                                                elseif($tipo == 'telefone')
                                                {
                                                        $spry_tipo = 'phone_number';
                                                        $atributos .= 'format:"phone_custom", ';
                                                        $atributos .= 'pattern:"(00) 0000-0000", ';
                                                        $atributos .= 'hint:"(__) ____-____", ';
                                                        $atributos .= 'useCharacterMasking:true, ';
                                                }
                                                // Tipo Email
                                                elseif($tipo == 'email')
                                                {
                                                        $spry_tipo = 'email';
                                                        $atributos .= 'useCharacterMasking:true, ';
                                                }
                                                // Tipo SKU2
                                                elseif($tipo == 'sku2')
                                                {
                                                        $spry_tipo = 'custom';
                                                        $atributos .= 'format:"custom", ';
                                                        $atributos .= 'pattern:"XX", ';
                                                        $atributos .= 'hint:"__", ';
                                                        $atributos .= 'useCharacterMasking:true, ';
                                                }
                                                // Tipo SKU3
                                                elseif($tipo == 'sku3')
                                                {
                                                        $spry_tipo = 'custom';
                                                        $atributos .= 'format:"custom", ';
                                                        $atributos .= 'pattern:"XXX", ';
                                                        $atributos .= 'hint:"___", ';
                                                        $atributos .= 'useCharacterMasking:true, ';
                                                }
                                                // Tipo SKU13
                                                elseif($tipo == 'sku13')
                                                {
                                                        $spry_tipo = 'none';
                                                        $atributos .= 'minChars:1, ';
                                                        $atributos .= 'maxChars:3, ';
                                                        $atributos .= 'useCharacterMasking:true, ';
                                                }
                                                // Outros
                                                else
                                                {
                                                        $spry_tipo = 'none';
                                                }
                                                        
                                                // Coloca a validação onblur
                                                $atributos .= 'validateOn:["blur"]';
                                                                                                
                                                // Monta o script
                                                echo 'var spry_'.$nome.' = new Spry.Widget.ValidationTextField("spry_'.$nome.'", "'.$spry_tipo.'", {'.$atributos.'});
';
                                        }
                                        elseif($tag == 'select')
                                        {
                                                echo 'var spry_'.$nome.' = new Spry.Widget.Validationselect("spry_'.$nome.'", {'.$atributos.'validateOn:["blur"], invalidValue:"-1"});
';
                                        }
                                        elseif($tag == 'textarea')
                                        {
                                                echo 'var spry_'.$nome.' = new Spry.Widget.ValidationTextarea("spry_'.$nome.'", {'.$atributos.'validateOn:["change","blur"], counterType:"chars_count", counterId:"count_'.$nome.'", useCharacterMasking:false, additionalError: "additionalErrorsZone"});
';
                                        }
                                }
                        }
                }
        } 
}
?>

Os outros arquivos usados são: um arquivo que coloca os campos em HTML na página, um arquivo XML que tem os dados dos campos e um outro arquivo que chama a função javascript (novo()) para exibir os dados do formulário.

A questão é que ele não executa os scripts em Javascript todas as vezes que acesso os formulártios. O mesmo formulário, as vezes funciona e as vezes não funciona. Já tentei fazer de algumas outras formas, inclusive utilizando eval(), mas não rolou.

Uma coisa intrigante é que se eu coloco um alert() no começo do código ele funciona tudo normal, sem problema nenhum. Mas eu não quero colocar um alert toda vez que o usuário acessa um formulário.

Sabe o que pode ser?

Obrigado.

Um abraço

Editado por leocello
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...