Exibir mais resultados com VRaptor + Ajax

Spidey, onde vc viu que fazer atribuições com vírgula é má prática?

isso é verdade em várias linguagens, mas em javascript isso é bem normal, e faz parte de uma das convenções mais adotadas. De qqer forma é uma questão de gosto só, não é uma má prática (em javascript)

O problema é que gera expressões longas e ilegíveis. Se for pra compactar o código, que use um compactor como o do YUI Compressor ou o JSMin.
Mas é bem opinião mesmo.

não fica necessariamente longa e ilegível, é só questão de gosto e não tem a ver com compactação:

var a = 1,
    b = "abc",
    c = ["a", "b"],
    d = $('p');

//vs
var a = 1;
var b = "abc"
var c = ["a", "b"];
var d = $('p');

Em relação ao JSON, ele pega apenas valores nativos, certo? ele não faz acesso a getters ou setters não?

Pois tenho uma classe que tem um atributo Date chamado nascimento.
Para puxá-lo, tenho um getNascimento() que pega o valor cru dele ( ex: 2011-02-28 ). e outro getter getNascimentoFormatado() que retorna em String o valor da data bonitinha ( ex: “28/02/2011” ).

A dúvida é, para puxar a data bonitinha na tela, terei então que criar um objeto String na minha classe de nome, por exemplo: nascimentoFormatado para que o JSON possa obtê-lo?

Valeu :slight_smile:

ou criar essa propriedade, ou criar um conversor para a sua entidade e registrar num CustomJSONSerialization.

o XStream, que o VRaptor usa, por padrão serializa os fields, não usa os getters e setters

Eu sei que meus problemas estão seguindo outro rumo, mas como não achei um forum específico de Javascript aqui no GUJ, estou incomodando vocês e postando aqui mesmo.

Terei que usar o submit do form para enviar as informações, ao invés de usar um com uma id qualquer
Aonde, pelo amor de deus, estou errando?

Estou fazendo o seguinte:

 $(function() {
	 $("#busca-nome").submit(function(e) {
		$('#resultado').html(''); //limpando a div para exibir novos resultados
		e.preventDefault(); //causador de problemas
		$.ajax({
			url: $(this).action(),
			data: $(this).serialize(),
			dataType: 'json',
			contentType: "charset=ISO-8859-1",
			success: function(json) {
	 	 		 // preenchendo a div de resultado
	 	 	 }
		});
	});
 });

Se eu tirar o e.preventDefault();, ele simplesmente mostra o resultado do json em outra página (o que não preciso).
Se eu coloco o e.preventDefault();, ele não submita o form mas também NÃO executa o ajax.

Por que isso?

tira o e.preventDefault();, e coloca um return false; no final da function

Se eu tirar o preventDefault(), ele simplesmente executará o ajax e vai pra outra página.
Qualquer linha depois do success: function(json) { (linha 10) é ignorada :frowning:

return false faz a mesma coisa que o preventDefault

btw:

$(function() {  
$("#busca-nome").submit(function() {  
    $('#resultado').html(''); //limpando a div para exibir novos resultados  
    $.ajax({  
        url: $(this).action(),  
        data: $(this).serialize(),  
        dataType: 'json',  
        contentType: "charset=ISO-8859-1",  
        success: function(json) {  
             // preenchendo a div de resultado  
         }  
    });  
    return false;
});  
});  

Exatamente, parceiro. Fiz EXATAMENTE o que está aí nesse código (copiei e colei, pra garantir).

O Problema é simples, ele não chega nesse return false, ele simplesmente direciona para a página com os resultados logo de cara, sem nem ler NADA abaixo da linha 09 do seu código.

E se eu coloco o return false antes, ele retorna antes de ler a função…
Será que eu sou muito azarado ou esse bug só acontece comigo?

E sim, muito obrigado pela insistência em me ajudar :smiley:

$(this).action() não existe :wink:

use

$(this).attr('action')

[]'s

Cara funcionou!

Assim, sabe o que eu acho?
$(this).action() existe, porque estava funcionando. Mas eu acho que ele EXECUTA a action normalmente, ignorando todo resto (tou chutando porque sou fraco de Javascript).

De qualquer forma, muito obrigado, Lucas. Obrigado mesmo! :smiley: