AjaxSubmit() com problemas na acentuação

13 respostas
ajaxjavaspring
menina_cac

Pessoal, boa tarde,

Estou tendo problemas na acentuação dos campos quando chega no Controller (Spring), ao invés de vir “cláusula” está vindo “cláusula”. Alguém já passou por isso? Segue trecho de código:

$('#form').ajaxSubmit({
url: 'teste',
type: "POST",
cache: false,
contentType: false,
processData: false,
success: function(responseTxt, status, xhr, form) {
	alert("ok.");
},
error: function(response, status, xhr, form) {
	alert("erro.");
},

});

No Controller:

@RequestMapping(value = "teste", method=RequestMethod.POST)
public @ResponseBody String salvar(
	HttpServletRequest request, 
	HttpServletResponse response,
	TesteForm form) {

}

13 Respostas

L

Defina o contentType, detalhe, suas páginas precisam ser salvas no formato indicado, seja UTF-8, ISO-88591, laitn1, etc…

menina_cac

OI LostSoldier, estão definidas com ISO-8859-1, só na declaração do javascript que está como UTF-8, veja abaixo:

<script type="text/javascript" charset="UTF-8" src="resources/js/teste.js"></script>

Na chamada do ajaxSubmit() já tentei colocar contentType : "application/x-www-form-urlencoded;charset=ISO-8859-1", mas não deu certo.

Só mais um detalhe: Só nessa chamada do ajaxSubmit() está vindo errado os acentos, nas outras chamadas ajax estão vindo corretamente.

L

Então o erro pode estar no controller, verifique se o arquivo foi salvo como ISO-88591 por exemplo…

IDE’s como eclipse, netbeans ou editor de texto como notepad++ podem te ajudar nessa…

Outra coisa, há divergência entre a tag script (UTF-8) e o contentType, o seu arquivo foi salvo em UTF-8 ou ISO?

menina_cac

Pelo Eclipse fui no arquivo, botão direito, em properties - resource - tex file encoding, o arquivo .jsp está em ISO-8859-1, o arquivo .js está em UTF-8, o .java está Cp1252.

Já tentei colocar o contentType como UTF-8, mas não deu também.

O estranho é que nas outras chamadas ajax desse mesmo Controller, mesmo .js e mesmo .jsp estão ok (são chamadas ajax comum, sem ser ajaxSubmit()). Nesse método específico eu preciso que seja com ajaxSubmit().

L

Nossa, que confusão!

Bom, dê uma fuçada nas funções encodeURIComponent e decodeURIComponent talvez possam te ajudar em algo…

Agora o ideal seria manter a mesma codificação em todos os arquivos do projeto (de preferência convertidos para UTF-8), isso evita problemas futuros até com a base de dados…

E tenha em mente, não adianta mudar o charset em tag’s, etc, sem converter o arquivo ok?

Eessa informação serve apenas para mostrar que o arquivo foi salvo em determinada codificação e nada mais, ela não converte o arquivo automaticamente…

menina_cac

Achei outra pessoa com o mesmo problema, só quando usa o plugin ajax submit.

L

Você consegue simular um submit por ajax, basta ao inves de usar o input submit, usar o input button mesmo chamando uma função js e nela você usa $.post…

menina_cac

Oi, eu estou usando o ajaxSubmit() porque preciso submeter arquivos (type=file), esse $.post submete aquivos?

Já estou usando input type=“button” chamando esse ajaxSubmit()

Olha só o que achei:

L

Que eu saiba não, envia conteudo em formato texto mesmo usando json…

menina_cac

Hmmm, então, acho que vou procurar outra solução para enviar arquivos… eu estava usando FormData, mas ele não funciona no IE9.

L

Complicado mesmo, incompatibilidade entre browsers, achei esse post…

Usando $.ajax simples mesmo, vai que ajuda…

menina_cac

Vou dar uma estudada…

Olha que estranho, estou no Chrome, quando inspecionei na aba Network em Headers está com o valor correto… e em Preview está com o valor errado…

menina_cac

Oi LostSoldier,

Mudei a solução, estou utilizando FormData para submeter via ajax, e tive que adicionar o código abaixo no web.xml para o Spring. Agora deu certo.

<filter>
	<filter-name>characterEncodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<init-param>
	<param-name>encoding</param-name>
	<param-value>UTF-8</param-value>
	</init-param>
	<init-param>
	<param-name>forceEncoding</param-name>
	<param-value>true</param-value>
	</init-param>	
</filter>
	
<filter-mapping>
	<filter-name>characterEncodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
Criado 10 de março de 2017
Ultima resposta 15 de mar. de 2017
Respostas 13
Participantes 2