Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

prompt

[Resolvido] Dois problemas com JQuery.Ajax em cadastro.

Recommended Posts

Fala galera, beleza?

 

Seguinte, estou começando a usar JQuery.Ajax para gravar infos no banco de dados, porém estou enfrentando dois problemas:

O primeiro tem a ver com a quantidade de texto que mando salvar.. se mando muito texto, o JQuery da erro e não termina a requisição.

E o segundo problema é que, quando cadastro pouco texto, ele salva, porém troca todos os acentos, cedilhas e afins para caracteres especiais...

 

Segue meu código para facilitar o entendimento:

 

<script src="../js/jquery-1.5.1.min.js"></script>

<script language="javascript">
$(document).ready(function(){
var action = $('form').attr('action');
$('form').attr('action','javascript:void(0);');
$('form').submit(function(){
	//		
	dados	= "action=gravar";
	dados   += "&id="+QueryString("codigo");
	dados 	+= "&tit="+document.getElementById("txttitulo").value;
	dados 	+= "&txt="+document.getElementById("txttexto").value;
	dados 	+= "&data="+document.getElementById("calendario").value;
	//
	$.post(action, dados, function(data){
		alert("Deu Certo!");
	});
	return null;
});
});
</script>

<form name="form1" id="form1" method="post" action="ajax_press.asp">
Titulo:
<input name="txttitulo" id="txttitulo" type="text" class="form" size="58" value="">
<p>
Data:
<input name="calendario" id="calendario" type="text" class="form" value=""/>
<p>
Texto:
<input name="txttexto" id="txttexto" type="text" class="form" value=""/>
<p>
<input type="submit" class="form" name="gravar" id="gravar" value="  Gravar  "  />
</form>

 

Não sei pq está acontecendo isso, e não faço a mínima de como resolver..

Alguém já teve esses problemas e pode me dar uma força??

 

 

Vlw galera!

Abs

Prompt

Compartilhar este post


Link para o post
Compartilhar em outros sites

Recomendo a você usar a função serialize() do jquery para transformar os dados do seu formulário no formato ideal para url's, o problema com acento é que você está enviando sem codificar eles antes.

 

E retire

        $('form').attr('action','javascript:void(0);');

não precisa disto se você trocar o return null por return false.

 

Ficando:

<script language="javascript">
$(document).ready(function(){
   //Não use apenas form, se você tem a ID use-a, é bem mais rápida e está aí para ser usada
   var action = $('#form1').attr('action');

   $('#form1').submit(function(){
       //$(this) se refere ao elemento atual, no caso o elemento com id form1
       dados   = $(this).serialize();
       //Veja como fica os dados.
       alert(dados);
       //Use o ajax mesmo, você tem um controle melhor sobre ele.
       $.ajax({
           type: 'POST',
           url: action,
           data: dados,
           success: function(data){
               alert(data);
           }
       });
       return false;
   });
});
</script>

 

Ex: http://jsfiddle.net/Skhap/

 

Cumprimentos. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal JCMais, obrigado pelo retorno!

 

Segui seus toques e consegui fazer a inserção das informações no banco de dados perfeitamente.

Só tem um problema que até agora não consegui resolver.. Os acentos e afins ainda estão sendo substituidos por caracteres especiais..

Texto de exemplo:

 

A palavra INSTITUIÇÕES é gravada como INSTITUIÇÕES..

 

Você falou em codificar antes de enviar, mas isso é referente ao serialize correto? Ou preciso codificar o texto de alguma forma antes de mandar?

Como fazer isso?

 

 

Obrigado novamente pela ajuda!

Abs,

Prompt

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá prompt, isso já é problema do BD, verifique se você está salvando como UTF-8 e se a tabela em que os dados estão inseridos está com collation utf8 também.

 

Se for mysql, no momento de inserir você pode setar a codificação que deseja efetuar a transação definindo:

SET NAMES 'utf8';

 

Ou usando a função do PHP http://php.net/manual/pt_BR/mysqli.set-charset.php

 

E você pode mudar a codificação atual da tabela usando:

ALTER TABLE tabela DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

 

Cumprimentos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá prompt, como o "JCMais - FLF" disse, verifique se as codificações estão corretas. Faça um teste sem ajax primeiro, faça uma inserção sem ajax para ver se var inserir corretamente se sim, o problema está na requisição, então force o asp a setar a codificação correta.

 

<% Response.Charset="ISO-8859-1" %>

 

Mude a codificação para a codificação correta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

douglash, no caso é melhor usar UTF-8, para evitar possiveis problemas. ;)

Se estiver usando PHP, o equivalente ao que o douglash citou é:

header('Content-type: text/html; charset=utf-8');

Lembre-se de usar isto no topo do arquivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

douglash, no caso é melhor usar UTF-8, para evitar possiveis problemas. ;)

Se estiver usando PHP, o equivalente ao que o douglash citou é:

header('Content-type: text/html; charset=utf-8');

Lembre-se de usar isto no topo do arquivo.

 

Fala Pessoal, beleza?

Obrigado a todos pela ajuda, porém encontrei um detalhe na documentação do JQuery.ajax(); que invalida as soluções que estão apresentando..

 

"When sending data to the server, use this content-type. Default is "application/x-www-form-urlencoded", which is fine for most cases. If you explicitly pass in a content-type to $.ajax() then it'll always be sent to the server (even if no data is sent). Data will always be transmitted to the server using UTF-8 charset; you must decode this appropriately on the server side"

 

 

O que precisarei então é uma forma de decodificar o texto com ASP de UTF-8 para ISO-8859-1 antes de gravar no banco...

Sei que aqui não é forum certo, mas alguém sabe como resolver isso?

 

Irei abrir um post no Forum de ASP para ver se resolvo isso e posto aqui para vocês ok?

 

 

Abs e, mais uma vez, obrigado pela força!

Prompt

Compartilhar este post


Link para o post
Compartilhar em outros sites

E por que, ao invés de decodificar para ISO, você não passa a usar o UTF-8 como codificação padrão do seu projeto? Iria evitar muitas dores de cabeça... :mellow:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Concordo com o JCMais - FLF, será bem melhor para seu projeto se você o UTF-8 como codificação padrão do seu projeto. Eu citei o ISO-8859-1 como padrão dos caracteres latinos, mas o melhor e correto seria utilizar UTF-8.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu pessoalmente não concordo com essa de 'correto usar tal'.

 

vários projetos meus, são apenas para brasileiros. ISO é uma especificação muito boa.

 

 

dá uma olhada aqui, @prompt:

http://www.wbruno.com.br/blog/2011/04/19/problemas-acentuacao-ajax-como-resolver/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim Bruno, porém eu digo se ele estiver planejando dá uma alavancada no projeto dele e internacionalizar o mesmo, melhor efetuar a mudança agora, do que ter que ficar editando arquivo no futuro, é apenas uma conselho pessoal, de alguém que já passou por isso. :lol:

 

Sucesso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E por que, ao invés de decodificar para ISO, você não passa a usar o UTF-8 como codificação padrão do seu projeto? Iria evitar muitas dores de cabeça... :mellow:

 

Sim JCMais - FLF, essa é uma solução, porém terei que recadastrar todos os textos do banco de dados, pois, do contrário, os outros caracteres é que são substituidos por um "quadradinho"..

 

Ai caio no mesmo problema de antes..

 

Abs,

Prompt

 

eu pessoalmente não concordo com essa de 'correto usar tal'.

 

vários projetos meus, são apenas para brasileiros. ISO é uma especificação muito boa.

 

 

dá uma olhada aqui, @prompt:

http://www.wbruno.com.br/blog/2011/04/19/problemas-acentuacao-ajax-como-resolver/

 

Opa William, tudo bem?

Obrigado pela força, seu blog é bem bacana, já tinha lido alguns posts nele e está de parabéns!

 

Enfim, mesmo assim, a solução que você expõe lá está em PHP, muito bom, porém preciso disso para usar no ASP..

Resumindo, pelo que entendo disso, preciso da função compatível no ASP da utf8_encode. Estou certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites
preciso da função compatível no ASP da utf8_encode. Estou certo?

como teu ajax ta enviando em utf, e você vai gravar em iso.

 

creio que você precise da correspondente a uft_decode().

faça alguns testes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai pessoal, encontrei a resposta para o que estávamos discutindo nesse post.

Na verdade, pelo que pude ver na internet não existe uma funções semelhantes às do PHP no ASP, que fazem o Encode ou Decode do Charset de uma string.

 

Como a solução é em ASP e não cabe nesse forum, postei no forum de ASP e coloco o link aqui a baixo como referência para os amigos que estiverem no mesmo apuro que eu passei:http://forum.imasters.com.br/topic/431268-converter-string-no-formato-utf-8-para-iso-8859-1-antes-de-gravar-no-banco/page__gopid__1702520#entry1702520

 

 

"Espero ajudar muitos como tantos já me ajudaram"

Abs,

Prompt

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.