[RESOLVIDO] - Enviar PUT com ajaxSubmit()

10 respostas
F

Bem pessoal,

eu estava querendo fazer o seguinte, queria enviar um formulário com o parâmetro PUT usando ajaxSubmit.

como eu fiz:

$('#cliente').ajaxSubmit(){
      url: '/cliente/salvar'
      type: 'PUT',
      success: function(){
        alert('Cliente alterado com sucesso!');
      }
      error: function(){
        alert('Cliente não alterado!');
      }
  }

no controller:

@Path("/cliente/salvar")
  @Put
  public void altera(Cliente cliente){
    clienteDao.altera(cliente);
  }

ai ele me dá um erro quando vai pro controller ele diz q o objeto cliente está null.

10 Respostas

F

ai como não estava dando certo ontem.

o que eu fiz mudei a uri na annotation path e mudei o verbo para @Post

ai deu certinho, alterou beleza.

e mudei meu javascript também né o type para POST

L

vc fechou o parênteses do ajax submit antes, o certo seria:

$('#cliente').ajaxSubmit({  
    url: '/cliente/salvar'  
    type: 'PUT',  
    success: function(){  
      alert('Cliente alterado com sucesso!');  
    }  
    error: function(){  
      alert('Cliente não alterado!');  
    }  
});

quando esse código é executado, o form #cliente está preenchido? os inputs estão com nomes: cliente.nome, cliente.endereço, etc?

F

estão sim lucas.

Eu preencho eles puxando os dados do servidor com a função $.getJSON e eles vem corretos. eu até vejo na tela eles preenchidos.

o problema é como te disse quando vai pro servidor vai nulo :S

há e o meu form tá assim

<form>
   id: <input type="text" name="cliente.id" id="id"></input>
   nome: <input type="text" name="cliente.nome" id="nome"></input>
</form>
L

tenta trocar o type pra POST, e colocar um input hidden no form:

<input type="hidden" name="_method" value="PUT"/>
F

rsrsrsr

NA VEIA LUCAS!

deu certo… conseguiu enviar como eu não estou com o meu projeto mesmo aqui eu fiz num exemplo que tenho e ficou assim.

form:

<form id="cliente">
		Nome: <input type="text" name="cliente.nome" id="nome"></input>
		Endereco: <input type="text" name="cliente.endereco" id="endereco"></input>	
		<input type="hidden" name="_method" value="PUT"></input>	
	</form>
	<button type="button" id="enviar">Enviar</button>

javascript:

$('#enviar').click(function(){
			$('#cliente').ajaxForm();
			$('#cliente').ajaxSubmit({
				dataType: 'text',
				url: '/testesvraptor/cliente/salvar',
				type: 'POST',
				success: function(){
					alert('OPA ALTEROU!');
				},
				error: function(){
					alert('OPA DEU ERRO!');
				}
			});
		});

Controller:

@Path("/cliente/salvar")
	@Put
	public void altera(Cliente cliente){
		try {
			System.out.println(cliente.getNome());
			System.out.println(cliente.getEndereco());
			result.nothing();
		} catch (Exception e) {
			result.notFound();
		}			
	}

mais uma vez! VLW Lucas… eu até q tinha pensado nisso ontem, mas já era 2 da matina ai num dava mais né kkkkkkkkk’

F

mas assim lucas,

não aconselhável usar o PUT?

L

os browsers não implementam o PUT nem o DELETE direito, então a gente tem que apelar pro input hidden mesmo

vc não precisa da chamada do ajaxForm… ou vc faz ajaxForm, ou faz ajaxSubmit

F

há entendi…

eu pensei que não dava era pra usar de jeito nenhum…

mas lucas… no meu caso o mesmo form eu uso para POST e PUT… teria como eu mudar isso ou tem q “trabalhar” mesmo pra manipular quando for put e post?..

L

se vc for usar o ajaxSubmit, tente tirar o input hidden e fazer dentro das opções do ajax:

data: {'_method': 'PUT'}
F

Lucas Cavalcanti:
se vc for usar o ajaxSubmit, tente tirar o input hidden e fazer dentro das opções do ajax:

data: {'_method': 'PUT'}

quando crescer quero ser igual o lucas heheehe :smiley:

deu certo cara! agora é só manipular hehehe

vlw!

Criado 26 de agosto de 2011
Ultima resposta 26 de ago. de 2011
Respostas 10
Participantes 2