Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Retornar String em uma chamada ajax

Boa tarde,

tenho um carrinho de compras, e quando o usuário clica em aumentar ou diminuir a quantidade, é feita uma chama Ajax para atualizar os valores, mas não consigo enviar apenas o valor como resposta ao meu Ajax pelo Spring.

Como poderia fazer isso?

meu código Ajax:

var somaQtn = function() {
    var qtn = parseFloat($(this).parent().find(".qtn-car").val());
    var valorUnitario = parseFloat($(this).parent().parent().parent().find(".vli").text());
    $(this).parent().parent().find(".vl").text(valorUnitario * qtn);
    $(this).parent().find(".qtn-car").val(qtn+1);


    $.ajax({
        type : "GET",
        url : "/importHair/atualizaTotal",
        data : {
            "id" : $(this).parent().find(".id").val(),
            "quantidade" : qtn+1,
        },

        success : function(resultado) {
            console.log(resultado);
        }
    })
}

meu controller :

@RequestMapping(value = "/atualizaTotal", method = RequestMethod.GET)
    public ModelAndView atualizaTotal(Integer id,Integer quantidade){
        ModelAndView modelAndView = new ModelAndView("/importHair");
        Produtos produto = dao.produto(id);
        PedidoItem pedidoItem = new PedidoItem(produto);
        pedidoItem.setQuantidade(quantidade);

        PedidoItem atualizaItem = pedido.atualizaItem(pedidoItem);
        BigDecimal valorTotalItem = pedido.getValorTotalItem(atualizaItem);

        modelAndView.addObject("valor", valorTotalItem);

        return modelAndView;

    }

O que recebo no meu console é o código HTML inteiro da página detalhe que estou estou informando no construtor do ModelAndView como poderia enviar apenas o resultado ?

obrigado.

2 respostas
solução!

Oi Gabriel tudo bem?

No Spring, quando voce retorna um objeto ModelAndView, ele assume que você deseja retornar uma pagina, porem quando usamos Ajax, geralmente esperamos que ele retorne uma String, JSON, XML etc. Para conseguir tal efeito precisamos anotar o método com @ResponseBody, e nao usar o objeto ModelAndView, seu código deve ficar assim:

@ResponseBody
@RequestMapping(value = "/atualizaTotal", method = RequestMethod.GET)
    public String atualizaTotal(Integer id,Integer quantidade){
        Produtos produto = dao.produto(id);
        PedidoItem pedidoItem = new PedidoItem(produto);
        pedidoItem.setQuantidade(quantidade);

        PedidoItem atualizaItem = pedido.atualizaItem(pedidoItem);
        BigDecimal valorTotalItem = pedido.getValorTotalItem(atualizaItem);

        return valorTotalItem.toString();

    }

Espero ter ajudado :) Bons Estudos

Caio muito obrigado pela resposta.

Eu ia vir atualizar a resposta porque cheguei a mesma conclusão que voce, erro de lógica meu.

valeu.