Olá galera. Sei que o assunto não é novo, e creio que muitos aqui já passaram noites em claro buscando uma solução.
Meu problema é o seguinte: Estou reestruturando um sistema simples de cadastro. Até então, atrabalhava com o form, validade por javascript e passando no post os dados que eram gravados no SQL via ASP.
No novo modelo, resolvi melhorar um pouco a usabilidade e aí começaram meus problemas.
O form está da mesma forma, sendo validada por js. O que mudei foi a forma do post, onde passei a utilizar ajax.
Estou usando o script abaixo:
1 |
function processaForm(postMetodo,postDiv,postUrl,postDados) { |
2 |
if (document.getElementById) { |
3 |
var mostraResultado = document.getElementById(postDiv); |
4 |
var getRequest = openRequest(); |
5 |
getRequest.open(postMetodo, postUrl, true); |
6 |
if(postMetodo == 'POST') { |
7 |
getRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); |
8 |
getRequest.setRequestHeader("Content-length", postDados.length); |
9 |
getRequest.setRequestHeader("Connection", "close"); |
10 |
getRequest.send(postDados); |
11 |
} else { |
12 |
if(postMetodo == 'GET') { |
13 |
getRequest.send(null); |
14 |
} |
15 |
} |
16 |
getRequest.onreadystatechange = function() { |
17 |
if (getRequest.readyState == 1) { |
18 |
mostraResultado.innerHTML = '<DIV ID="loaderBox"><DIV ID="loaderIcon"></DIV><DIV ID="loaderText">Processando...</DIV></DIV>'; |
19 |
} |
20 |
if (getRequest.readyState == 4) { |
21 |
if (getRequest.status == 200) { |
22 |
var Resultado = getRequest.responseText; |
23 |
Resultado = Resultado.replace(/\+/g," "); |
24 |
Resultado = unescape(Resultado); |
25 |
mostraResultado.innerHTML = Resultado; |
26 |
} else { |
27 |
mostraResultado.innerHTML = '<DIV ID="loaderBox"><DIV ID="loaderText">Falha ao carregar.</DIV></DIV>'; |
28 |
} |
29 |
} |
30 |
} |
31 |
} |
32 |
} |
Faço a chamada da seguinte forma:
usando POST
processaForm('POST','divCadastro','cadastroGrava.asp',encodeURI(postDados)); |
ou
usando GET
processaForm('GET','divCadastro','/cadastroGrava.asp?' + postDados); |
Tudo funciona perfeitamente, tanto num método como no outro. O problema está na codificação de caractéres. Palavras com acento ficam codificadas.
Na página ASP faço o request das variáveis e envio a uma função que faz o tratamento e grava no SQL.
Exemplo usando o nome João Melão:
Com POST tenho o seguinte resultado:
Retorno no HTML: João Melão
SQL: João Melão
Com GET:
Retorno no HTML: João Melão
SQL: João Melão
Estou há mais de uma semana testando todas as variantes possíveis, mas sem sucesso até agora. Li muita coisa e vi muita solução bizarra, mas nada que realmente resolvesse o problema sem gambiarras.
Alguém por aqui já passou por problema semelhante e encontrou alguma solução?
Toda e qualquer ajuda será muito bem vinda!
Abraços a todos e obrigado,
CDechen
CDechen