none
Ajuda com ASP e Ajax RRS feed

  • Pergunta

  • 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&#195;&#163;o Mel&#195;&#163;o

    Com GET:
    Retorno no HTML: João Melão
    SQL: Jo&#227;o Mel&#227;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
    sexta-feira, 6 de fevereiro de 2009 01:40

Todas as Respostas

  • Fala Galera,

    Depois de bater muito a cabeça, consegui resolver. Segue a solução e espero que possa ajudar outros que tenham o mesmo problema.

    No javascript, incluí a codificação:
    getRequest.setRequestHeader("encoding""ISO-8859-1"); 

    No ASP que recebe as informações, também incluí a codificação:
    <% Response.Charset ="ISO-8859-1" %> 

    Com isso, os dados são gravados corretamente no SQL.

    Para as mensagens de tratamento, estou usando:
    <% Response.Write Server.HTMLEncode(string)) %> 

    Meio mala, mas funcionou.

    Abraços a todos!
    CDechen
    sexta-feira, 6 de fevereiro de 2009 20:17