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

Javascript Sem <head> + Ajax


baalzamon

Pergunta

Estou desenvolvendo um modulo em ajax mas estou me deparando com alguns problemas...

Tenho uma janela principal com uma div contendo um menu e outra div contendo uma ID que receberá dinamicamente o que for escolhido no menu... ou seja, em ajax...

Problema 1: serão arquivos externos que ocuparao a div com ID e elas terão apenas o form e um conteudo dentro do form... portanto não terao as tags html, head e body... mas eu preciso criar funções em javascript nessas paginas para algumas validações, como fazer isso se não tem a tag head?

Problema 2: Por algum motivo a programação não consegue pegar os valores desses forms e salvar no banco de dados... mas curiosamente ela consegue jogar o resultado do banco nesses mesmos campos... alguém tem uma ideia? ps: a pagina do menu tem arquivo de programação e cada um dos htmls externos também...

Espero que alguém possa me ajudar =]

[]'s

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

e aí baalzamon,

sua primeira duvida,

você pode colocar as tags <script></script> em qualquer lugar da pagina,

no inicio, meio ou fim, ate mesmo dentro do head, como de convencao.

isso não sera problema pra você.

a segunda duvida,

quando você vai salvar os dados no banco, esta fazendo isso como? via ajax?

ou do modo tradicional?

se for pelo ajax, não esqueca que ele não esta submetendo o form,

então você precisa passar os valores pela url, senao não tem jeito dele salvar. hehe

beleza?!

sucesso ai,

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu pela resposta amigo!

O problema é que eu já coloquei no inicio e no fim do html externo...

<script>
 function bla()
 {
    alert('qualquer coisa');
 }
</script>
<form>
   campos, inputs, etc...
   <input type="button" name="BT_M" onclick="bla();"
</form>
ou
<form>
   campos, inputs, etc...
   <input type="button" name="BT_M" onclick="bla();"
</form>
<script>
 function bla()
 {
    alert('qualquer coisa');
 }
</script>

Ele não roda =///

Alguma sugestão?

Link para o comentário
Compartilhar em outros sites

  • 0

olha,

é isso ai mesmo,

quando você diz que não da,

da algum erro? ou não acontece nada? em qual navegador esta testando?

a unica coisa que eu mudaria no seu codigo é:

<script> colocaria como: <script language="javascript">

e na chamada do metodo também:

onclick="bla();" colocaria como: onclick="java script:bla();"

é isso, tenta ai.

at,

Link para o comentário
Compartilhar em outros sites

  • 0

cara

eu to meio incredulo com isso que tu está falando.

eu to achando, que quando tu atualiza o conteudo dentro da div,

tu não está reescrevendo o metodo js junto,

tipo, tu escreve a primeira vez,

ai tu atualiza o conteudo da div, sobrepoe tudo que tinha ali dentro,

e não coloca o metodo js novamente.

por isso ele não encontra o metodo.

sera que não é isso que está acontecendo!?

at,

Link para o comentário
Compartilhar em outros sites

  • 0

vou explicar bem explicadinho, :)

digamos que tu tenha algo assim:

<html>
...
...
<body>
...
...
<div>
teu form dinamico aqui dentro
<input 0 onclick=bla>...
<script>
function bla...
</script>
</div>
...
...
</body>
</html>
ai você vai la e atualiza a div, coloca por exemplo:
document.div = "<input 1 onclick=bla><input 2 onclick=bla>"

o que acontece nesse caso,

o que você tinha antes:

<div>

teu form dinamico aqui dentro

<input 0 onclick=bla>...

<script>

function bla...

</script>

</div>

passou a ser:
<div>

<input 1 onclick=bla><input 2 onclick=bla>

</div>

entendeu?! tu matou teu metodo js, por isso ele não acha.

quando você for atualizar o conteudo da div, precisa colocar a funcao dentro da div também.

beleza?!

Link para o comentário
Compartilhar em outros sites

  • 0

Entendi sua ideia... mas o que acontece aqui é assim...

meu programa menu fica assim:

considerando que o ajax joga o resultado o ajax.responseText no segundo parametro que passo no 'ajaxl'

<html>
...
<head>
...
</head>
<body>
em algum lugar do body tem um cara que chama o ajax
<a href="java script: ajaxl('pagina_alvo.html','DIV_A_SER_ATUALIZADA');">Abrir pagina</a>

<div id="DIV_A_SER_ATUALIZADA">
</div>
</body>
</html>
E aí tem minha pagina_alvo.html que é basicamente assim:
<script language="javascript">
  function bla()
  {
    alert('Teste');
  }
</script>
<form name="formx">
..conteudo do form, campos, etc...
   <input type="button" name="BT_OK" onclick="java script: teste();">
</form>

entendeu como estou tentando fazer? são 2 htmls, um é chamado dentro do outro, intão o script vai junto porque faz parte da pagina_alvo.html, mas nem funciona!!!

Link para o comentário
Compartilhar em outros sites

  • 0

bom,

nesse seu ultimo exemplo, não iria funcionar mesmo,

porque você criou uma function bla, e chama um evento teste().

mas não deve ser esse o problema real.

realmente, está dificil de imaginar como você esta fazendo isso, logo dificulta propor uma solucao.

se você quizer colocar o codigo completo e real de todo esse processo,

talvez eu possa ajudar.

sucesso ai,

Link para o comentário
Compartilhar em outros sites

  • 0

Este é minha pagina principal:

<html>
<head>
<meta content="Project : menu_csps  -  Program : csps.menu_config.html">
<title></title>
&lt;script src="scripts.js"></script>
&lt;script>
<!--
  function objXMLHttp()
  {
     var ajax = false;
     if (window.XMLHttpRequest)
     {
       ajax = new XMLHttpRequest();
       return ajax;
     }
     else if (window.ActiveXObject)
           {
            var versoes = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0",
                       "MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp"];
            for(var i=0;i<versoes.length;i++)
            {
              try{
                   ajax = new ActiveXObject(versoes[i]);
                   return ajax;
                 }
                 catch(erro)
                 {
                   //erro = erro do ajax
                 }
            }
         }
     else
     {
       alert("Seu browser não é compativel com XMLHttpRequest.\nFavor entrar em contato com o administrador do sistema.");
     }
 }

  function abrirPag(url,id,action)
  {
    var ajax = objXMLHttp();
    ajax.open("GET",url,true);
    ajax.onreadystatechange = function(){
                                if(ajax.readyState != 4)
                                {
                                  document.getElementById('CONTEUDO').innerHTML = '<center>Carregando...</center>';
                                }                      
                                if(ajax.readyState == 4)
                                {
                                  if (ajax.status == 200)
                                   {
                                     document.getElementById('CONTEUDO').innerHTML = ajax.responseText;
                                   }
                                 }
                        }
     if(window.XMLHttpRequest)
     {
       ajax.overrideMimeType("text/xml;charset=iso-8859-1");
     } 
      ajax.send(null);   
  }

-->
</script>
</head>
<body onload="abrirPag('mnt.config.html','CONTEUDO','OPEN');">
 <table width="590" border="0" align="center" cellpadding="0" cellspacing="0">
   <tr>
     <div align="center">
        <tr>
          <td  colspan="4">
           <div align="center">
              <ul>
                 <li>
                   <a id="CONFIG" href="java script:abrirPag('mnt.config.html','CONTEUDO','ALTER');">Configurações Gerais</a>
                 </li>
              </ul>
            </div>
          </td>
        </tr>
     </div>
   </tr>
 </table>
 <table width="590" border="0" align="center" cellpadding="0" cellspacing="0">
     <tr>
       <td id="CONTEUDO">
       </td>
     </tr>
 </table>
</body>
</html>
E este é o html do tal mnt.config.html que ele chama no link A:
&lt;script>
<!--
   function verifica()
   {
      alert(document.mntform.NDEC_VALOR.value);
   }
-->
</script>
<form name="mntform" action="wicaction/mnt.config.html" onsubmit="return abrirPag('mnt.config.html','CONTEUDO','SAVE');">
  <table width="590"   border="0" align="center" cellpadding="0" cellspacing="0" class="fundo_tabela">
    <tr> 
      <td valign="top" align="center">
        <table width="590" border="0" align="center" cellpadding="0" cellspacing="0">
          <tr>
            <td>
                Valor:
                <input name="NDEC_VALOR" type="text" onblur="verifica()">
              </td>
            </tr>
          </tr>  
        </table>
      </td>
    </tr>
  </table>
</form>

A funcao verifica não funciona de jeito algum, já tentei também colocar um botão e fazer testes com onlick... em relação ao post anterior eu digitei errado mesmo a chamada da função!

Link para o comentário
Compartilhar em outros sites

  • 0

tem alguma coisa importante dentro do arquivo:

scripts.js que você importa no inicio do codigo???

é tentei simular o problema aqui na maquina,

mas ficou eternamente na mensagem

carregando...

at,

============EDITADO=============

daeeee

mudei algumas linhas pra rodar aqui e testar...

e não é que é verdade mesmo?!

eu nunca precisei fazer isso ai... agora que fui ver.

o diabo não interpreta os metodos colocados dinamicamente...

velho, provavelmente é algum sistema de seguranca dos browsers.

pra impedir que sejam inseridos codigos maliciosos.

mas assim... talvez seja possivel fazer isso usando uma das libs (framework) ajax,

como por exemplo o JSON, ou prototype...

uma coisa que pode ser feita, dentro do seu codigo,

dependendo da quantidade de codigo que você vai usar claro,

senao fica inviavel.

ao invés de chamar um metodo js on onblur, coloca o procedimento direto no onblur.

faz o teste ai.

ao invés de chamar um metodo js pra dar um alert(), coloca o alert() direto no onblur.

ai funciona. hehe

coisas do ajax,

se conseguir uma implementacao melhor, posta ai pra galera.

sucesso,

Link para o comentário
Compartilhar em outros sites

  • 0

Galera, depois de muita luta e pesquisa, consegui resolver...

É necessário apenas criar um novo elemento, no caso um elemento de script e "filtrar" o script de dentro da página.

No meu caso, com só tenho um script na página, foi só "pegar" todo o conteúdo que estava entre <script language="javascript" type="text/javascript"> e </script>

Abaixo segue um modelo...

function execScript(codigoHTMLcomScript)
{
   // Cria elemento de script
   var scriptObj = document.createElement('script');

   // Divide o responseText em 2 partes, sendo a segunda a parte onde irá iniciar o script
   // então desconsidera a primeira parte.
   tmpScriptCode = codigoHTMLcomScript.split('<script language="javascript" type="text/javascript">');

   // divide a parte relevante novamente em 2 partes, sendo que agora a primeira
   // parte conterá o script, a segunda parte é descartada.
   scriptCode = tmpScriptCode[1].split('</script>');

   // Define parâmetro language=javascript para o objeto de script 
   scriptObj.setAttribute('language', 'javascript');

   // Atribui o código-fonte do script ao obj de script
   scriptObj.text = scriptCode[0];

   // Executar o script
   document.body.appendChild(scriptObj);

}

Editado por Spyder.RV
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,2k
    • Posts
      651,9k
×
×
  • Criar Novo...