[RESOLVIDO]VRaptor + chamada AJAX

4 respostas
donny

Tenho o código abaixo que faz um post para o controller passando alguns parâmetros. O último parâmetro está com problema de “enconding”, estou pegando de um input o texto “PONTO A”, na url e no controller está passando “PONTO%20A”.

http://localhost:8080/CLog/monitorcoletaresiduo/tratarevento/95/8a828b833b4c2bf0013b4c4a6b2e0089/PONTO%20A

Código JavaScript:

function tratarEvento(){
              
	           	var id = $('#dispositivoVeiculo').val();
	        	var idgps = $('#idGps').val();
	        	var dsPonto = $('#ponto').val();
	       		var url = '<c:url value="/monitorcoletaresiduo/tratarevento/"/>'+ id + "/" + idgps+ "/" + dsPonto;
	
	   			$.post(url, function(response, status, xhr) {
	   				if (status == 'success') {
	       	    	  trocarIcone($('#idJanela').val());
	       	    	  auto_reload();
	   				}else{
	       				alert('Ocorreu um erro ao tentar tratar o evento para o veículo ' + $('#placa').val()+'.');
	   				}
	   			});	
          }

Código do Controller:

@Transactional
	@Post
	@Path("/monitorcoletaresiduo/tratarevento/{id}/{idgps}/{dsPonto}")
	@PermissaoAcesso(permissao=Permissao.COLETA_RESIDUO_TRATAR_EVENTO)
	public void tratarEvento(long id, String idgps, String dsPonto) {
}

Alguém conhece uma solução para isso?

4 Respostas

Rafael_Guerreiro

Cara, não pode ter espaço na URL, por isso ele substitui para o código ASCII do espaço, o %20.

Por você estar fazendo um Post, você não deveria passar os parâmetros via URL e sim pelo atributo data do ajax…

$.ajax({ url: '<c:url value="/monitorcoletaresiduo/tratarevento/"/>', data: { id: id, idgps: idgps, dsPonto: dsPonto }, success: function(response){ if (status == 'success') { trocarIcone($('#idJanela').val()); auto_reload(); }else{ alert('Ocorreu um erro ao tentar tratar o evento para o veículo ' + $('#placa').val()+'.'); } } });

donny

Obrigado pela dica, vou testar!

Lucas_Cavalcanti

os parametros que são ids podem estar na url, mas esse que é um texto é melhor ser via query param mesmo

donny
Funcionou! Segue abaixo o código do javascript:
function tratarEvento(){

	           	var id = $('#dispositivoVeiculo').val();
	        	var idgps = $('#idGps').val();
	        	var dsponto = $('#ponto').val();

              $.ajax({
           	   url: '<c:url value="/monitorcoletaresiduo/tratarevento/"/>',
           	   type: 'POST',
           	   data: {
           	      id: id,
           	      idgps: idgps,
           	      dsponto: dsponto
           	   },
           	   success: function(response){
           	      trocarIcone($('#idJanela').val());  
           	      auto_reload();  
           	   },
           	 error: function(response){
           		 alert('Ocorreu um erro ao tentar tratar o evento para o veículo ' + $('#placa').val()+'.');  
           	   }
           	});
              
          }
Código do método do Controller:
@Transactional
	@Post
	@Path("/monitorcoletaresiduo/tratarevento/")
	@PermissaoAcesso(permissao=Permissao.COLETA_RESIDUO_TRATAR_EVENTO)
	public void tratarEvento(long id, String idgps, String dsponto) {
		try{
			//Implementação...
                        result.use(Results.json()).from("OK").serialize();
			
		}catch (Exception e) {
			e.getMessage();
			e.printStackTrace();
			result.use(Results.json()).from("ERRO").serialize();
		}
	}
Obrigado pela ajuda!
Criado 29 de novembro de 2012
Ultima resposta 29 de nov. de 2012
Respostas 4
Participantes 3