-
Submit vs button
Olá pessoal, após alguns anos afastado voltei a brincar com php...
Mas estou tendo um pequeno problema com um formulário. Usando ajax não estou conseguindo receber os dados do formulário por meio do botão submit, apenas usando o button que estou conseguindo receber os dados do formulário.
Se alguém que já teve esse problema ou saiba como resolve-lo puder me ajudar agradeço.
Script ajax:
Código PHP:
function BuscaElementosForm(idForm)
{
var elementosFormulario = document.getElementById(idForm).elements;
var qtdElementos = elementosFormulario.length;
var queryString = "";
var elemento;
this.ConcatenaElemento = function(nome,valor)
{
if (queryString.length > 0)
{
queryString += "&";
}
queryString += encodeURIComponent(nome) + "=" + encodeURIComponent(valor);
};
for (var i = 0; i < qtdElementos; i++)
{
elemento = elementosFormulario[i];
if (!elemento.disabled)
{
switch(elemento.type)
{
case 'text': case 'email': case 'password': case 'hidden': case 'textarea':
this.ConcatenaElemento(elemento.name,elemento.value);
break;
case 'select-one':
if (elemento.selectedIndex >= 0)
{
this.ConcatenaElemento(elemento.name,elemento.options[elemento.selectedIndex].value);
}
break;
case 'select-multiple':
for (var j = 0; j < elemento.options.length; j++)
{
if (elemento.options[j].selected)
{
this.ConcatenaElemento(elemento.name,elemento.options[j].value);
}
}
break;
case 'checkbox': case 'radio':
if (elemento.checked)
{
this.ConcatenaElemento(elemento.name,elemento.value);
}
break;
}
}
}
return queryString;
}
function extraiScript(texto)
{
var ini, pos_src, fim, codigo, texto_pesquisa;
var objScript = null;
texto_pesquisa = texto.toLowerCase()
ini = texto_pesquisa.indexOf('<script', 0)
while (ini != -1)
{
var objScript = document.createElement("script");
pos_src = texto_pesquisa.indexOf(' src', ini)
ini = texto_pesquisa.indexOf('>', ini) + 1;
if (pos_src < ini && pos_src >= 0)
{
ini = pos_src + 4;
fim = texto_pesquisa.indexOf('.', ini)+4;
codigo = texto.substring(ini,fim);
codigo = codigo.replace("=","").replace(" ","").replace("\"","").replace("\"","").replace("\'","").replace("\'","").replace(">","");
objScript.src = codigo;
}
else
{
fim = texto_pesquisa.indexOf('</script>', ini);
codigo = texto.substring(ini,fim);
objScript.text = codigo;
}
document.body.appendChild(objScript);
ini = texto.indexOf('<script', fim);
objScript = null;
}
}
function returnQuery(form)
{
var elements = form.elements;
var fields = null;
for (var i = 0; i < elements.length; i++)
{
if ((name = elements[i].name) && (value = elements[i].value))
{
if(i == 0)
{
fields = name + "=" + encodeURIComponent(value);
}
else
{
fields += "&"+(name + "=" + encodeURIComponent(value));
}
}
}
return fields;
}
function requestPage(url, div, tipo, campos)
{
var ajax = null;
if(window.ActiveXObject)
{
ajax = new ActiveXObject('Microsoft.XMLHTTP');
}
else if(window.XMLHttpRequest)
{
ajax = new XMLHttpRequest();
}
if(ajax != null)
{
var cache = new Date().getTime()
ajax.open(tipo, url+'&cache='+cache, true);
ajax.onreadystatechange = function status()
{
if(ajax.readyState == 4)
{
if(ajax.status == 200)
{
document.getElementById(div).innerHTML = ajax.responseText;
var texto = unescape(ajax.responseText);
extraiScript(texto);
}
}
else
{
document.getElementById(div).innerHTML = '<center><img src="templates/store/images/ajax.gif" /></center>';
}
}
if(tipo == "POST")
{
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
ajax.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
ajax.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");
ajax.setRequestHeader("Pragma", "no-cache");
ajax.send(campos);
}
else
{
ajax.send(null);
}
}
}
Formulário:
Código PHP:
<form id="newsletter" method="POST">
<input type="email" name="email" placeholder="Email" required>
<input type="submit" value="" onClick="requestPage('?pagAjax=general&action=newsletter','resultNewsletter','POST',BuscaElementosForm('newsletter'));" />
</form>
-
ja tentou tirar o onClick do input, e substituir por action no form?
ficando:
Código PHP:
<form id="newsletter" method="POST" action="javascript: requestPage('?pagAjax=general&action=newsletter','resultNewsletter','POST',BuscaElementosForm('newsletter'));">
<input type="email" name="email" placeholder="Email" required>
<input type="submit" value=""/>
</form>
não tenho certeza. mas acho que isso resolve seu problema.
caso não resolva, use o button e coloque um input submit como hidden.