Mandar variaveis via post com javascript?

6 respostas
ruyoutor

Alguem sabe como, ao envez de eu mandar os valores dos controles de formulário via post mandar valores de variaveis via javascript.

6 Respostas

Pedrosa

Pode ser GET?

function envia(par1,par2){
    location.href='url?var1='+par1+'&var2='+par2;
}
dc.rec1

Você esta enviando teu formulário via form ou ta implementando Ajax?

Se for via form, e somente colocar o valor post no atributo method da tag form.

Se for via Ajax, depende da implementação que você esteja usando. Por exemplo, eu acostumo usar Dojo Toolkit e chamo o método
dojo.xhrPost({…})

arts

para fazer post sem ajax no javascript só tem um jeito, vc criar um formzinho e colocar as variavéis nele e pelo javascript só diser document.formulario.submit();,mas se for am ajax, procure na web pelo toolkit que vc estiver usando,mas se for via objeto mesmo no braço só colocar xmlthhpobj.send(dadosurlencoded); onde xmlthhpobj é seu objeto ajax e dadosurlencoded é os dados serializado modo parametro1=valor1&parametro2=valor2

Aldrin_Leal

Você pode utilizar uma biblioteca Ajax, como a Prototype. Ela lhe permite que você construa requests arbitrários e os submeta. Não deve ser difícil fazê-lo.

Aldrin_Leal

Falando nisso: Existe uma situação aonde o JavaScript no Internet Explorer não pode modificar o method e o action do Form. E eu precisava emular este comportamento.

Montei uma prova de conceito usando o Prototype. Não está perfeito, mas serve pra dar uma idéia de algo interessante: Criar dinamicamente um form html (copiando a partir do original) e submetê-lo:

<html>
  <head>
    <script type="text/javascript" src="prototype.js"></script>
  <script type="text/javascript">
  function serializar() {
    var formElements = Form.getElements($("formTeste"));
    
    var hiddenDiv = $("hiddendiv");
    
    hiddenDiv.update("");

    var cloneForm = new Element("form", { "method" : "post", "action" : "http://www.leal.eng.br/files/dumpform.php" });
    
    formElements.each(
      function(element) {
        var attr = { 'tagName' : element.tagName };
        
        if ("" == element.readAttribute('name'))
            return;
        
        attr['name'] = element.readAttribute('name');
        attr['value'] = element.readAttribute('value');

        switch (element.tagName.toLowerCase()) {
        case "select": {
          attr['tagName'] = 'input';
        }
        case "button":
        case "input": {
                if (element.hasAttribute('type') && "checkbox" == element.readAttribute('type').toLowerCase()) {
                    attr['type'] = 'checkbox';
                    if (!element.readAttribute('checked'))
                        return;

                    attr['checked'] = element.readAttribute('checked');
                } else {
                    attr['type'] = 'hidden';
                }
                break;
        }
        }
        
        var tagName = attr['tagName'];
        
        attr['tagName'] = null;
        
        var childElementHTML = new Element(tagName, attr);

        cloneForm.appendChild(childElementHTML);
      }
    );
    
    //cloneForm.appendChild(new Element("input", { 'type' : "submit" }));
    
    hiddenDiv.update(cloneForm);
    
    var contents = $("hiddendiv").innerHTML.escapeHTML();
    
    $("dataDiv").update(contents + "<br/>" + $("hiddendiv").innerHTML);

    cloneForm.submit();
  }
  </script>
  </head>
  <body>
  <div id="hiddendiv" style="display: none"></div>
  <form id="formTeste" method="POST" action="http://www.leal.eng.br/files/dumpform.php">
    <input type="hidden" name="A1" value="Valor A1" />
    <input type="text" name="A2" value="Valor A2" /><br/>
    <input type="checkbox" name="A3" checked="true" value="A3(1)" /><br/>
    <input type="checkbox" name="A3" value="A3(2)" /><br/>
    <input type="submit" name="Botao" value="Enviar (AJAX)" /><br/>
    <select name="select">
      <option name="A3" value="Valor A3" />A3</option>
      <option name="A4" value="Valor A4" selected>A4</option>
    </select>
  </form>
  <input id="btnSerializar" type="button" name="serializar" onclick="serializar()" value="Clonar e Submeter">
  <div id="dataDiv"></div>
  </body>
</html>
ruyoutor

Valeu mesmo galera pela atenção.

Eu vou mandar via get mesmo como o amigo Pedrosa sugeriu.
Por enquanto fica mais facil para mim depois vou dar uma olhada em ajax.

vlw!

Criado 21 de dezembro de 2007
Ultima resposta 21 de dez. de 2007
Respostas 6
Participantes 5