AjaxSubmit() com problemas na acentuação

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) {

}

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

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.

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?

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().

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…

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

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…

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:

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

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

Complicado mesmo, incompatibilidade entre browsers, achei esse post…

Usando $.ajax simples mesmo, vai que ajuda…

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…

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>
1 curtida