Alguem sabe como, ao envez de eu mandar os valores dos controles de formulário via post mandar valores de variaveis via javascript.
Pode ser GET?
function envia(par1,par2){
location.href='url?var1='+par1+'&var2='+par2;
}
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({…})
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¶metro2=valor2
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.
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>
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!