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

Atualizar div com o objeto vindo do controller ou por json!

Aqui tenho os botões que recebem o objeto do controller com o mês e ano atual

<nav>
<ul class="pager">
    <li class="previous">
        <button id="filtrarData_${dataAntUrl}" onclick="tbody(date)"
        class="btn btn-default btn-outline pull-left" value="${dataAntUrl}">
        <span aria-hidden="true"><i
            class="icon wb-chevron-left-mini" aria-hidden="true"></i></span>
            <fmt:parseDate pattern="MM/yyyy" value="${dataAntUrl}" var="date"  />
            <fmt:formatDate value="${date}" pattern="MMMM yyyy" var="st1"/>
            <c:set var="st2" value="${fn:replace(st1, ' ', ' de ')}" />
            ${st2}
    </button>
</li>
<li class="center">
    <button id="filtrarData_${dataAtuUrl}" onclick="tbody(date)"
        class="btn btn-default btn-direction btn-outline btn-bottom" value="${dataAtuUrl}">
        <span aria-hidden="true"></span>
            <fmt:parseDate pattern="MM/yyyy" value="${dataAtuUrl}" var="date"  />
            <fmt:formatDate value="${date}" pattern="MMMM yyyy" var="st1"/>
            <c:set var="st2" value="${fn:replace(st1, ' ', ' de ')}" />
            ${st2}                
    </button>
</li>
<li class="next">
    <button id="filtrarData_${dataPosUrl}" onclick="tbody(date)"
        class="btn btn-default btn-outline pull-right"
        value="${dataPosUrl}">
            <fmt:parseDate pattern="MM/yyyy" value="${dataPosUrl}" var="date"  />
            <fmt:formatDate value="${date}" pattern="MMMM yyyy" var="st1"/>
            <c:set var="st2" value="${fn:replace(st1, ' ', ' de ')}" />
            ${st2}
            <span aria-hidden="true"> <i
                class="icon wb-chevron-right-mini" aria-hidden="true"></i></span>
        </button>
    </li>
</ul>
</nav>

Aqui a a rotina que recebe os dados, depois do click, enviados e retornados agora com a nova data mês e ano, anterior, atual ou posterior!

<script>
    $(document).ready(function() {

        $('button[id*="filtrarData_"]').click(function (){

            var pegaData = $(this).val();
            console.log(pegaData);

            tbody(pegaData);
        });
        //obj - {"dataAntUrl":"05/2017","dataAtuUrl":"06/2017","dataPosUrl":"07/2017"}
        function tbody(date){
            var urlData = "datas/" + date;
            console.log(urlData);    

            $.ajax({
                url: urlData,
                beforeSend: function(){
                    console.log("Carregando..");
                },
                success: function(retorno){

                    console.log("Retorno = " + retorno);
                    var obj = JSON.parse(retorno);

                     $('button[id*="filtrarData_"]').append("filtrarData_" + obj.dataPosUrl);

                },
                error : function(a,b,c){
                       alert('Erro: '+a[status]+' '+c);
                   }
            });
        }
    } );
    </script>

A pergunta é como posso implementar para atualizar a div que estão esses botões inserindo os novos valores que capturo por json! Ou enviar o objeto normalmente como da primeira vez que a que carrega a página, sem dar o refresh, apenas atualizando a div? Lembrando que são três valores ao mesmo tempo que está dentro do objeto!

6 respostas

não vai mudar em relação a maneira que vc já está trabalhando.. selecione os elementos pelo id e mude as propriedades que são necessárias.. seu código já está pronto para isso.. atualizar uma div, botão, li ou outra coisa qualquer não difere em nada.

Alberto minha pergunta é como(?) atualizar, com os dados do objeto, essa div ou outro elemento e enviar esses dados sem o refresh?

Fiz um replaceWith para atualizar, não sei se é o mais correto, acontece que atualiza apenas no primeiro clique e depois não mais, não tenho retorno no console, navegador e nada!

$(document).ready(function() {

        $('button[id*="filtrarData_"]').click(function (){

            var pegaData = $(this).val();
            console.log(pegaData);

            tbody(pegaData);
        });
        //{"dataAntUrl":"05/2017","dataAtuUrl":"06/2017","dataPosUrl":"07/2017"}
        function tbody(date){
            var urlData = "datas/" + date;
            console.log(urlData);    

            $.ajax({
                url: urlData,
                beforeSend: function(){
                    console.log("Carregando..");
                },
                success: function(retorno){

                    console.log("Retorno = " + retorno);
                    var obj = JSON.parse(retorno);

                     $('button[id*="filtrarData_"]')
                     .replaceWith('<button id="filtrarData_' + obj.dataPosUrl + '" onclick="tbody(date)"'
                                        + 'class="btn btn-default btn-outline pull-right" value=' + obj.dataPosUrl + '>'
                                        + obj.dataPosUrl + '<span aria-hidden="true"><i class="icon wb-chevron-right-mini"'
                                        + 'aria-hidden="true"></i></span></button>');

                     console.log(newButton);

                    //dt.ajax.reload();
                    console.log("Data posterior = " + obj.dataPosUrl)
                    console.log("Data atual     = " + obj.dataAtuUrl)
                    console.log("Data antterior = " + obj.dataAntUrl)
                },
                error : function(a,b,c){
                       alert('Erro: '+a[status]+' '+c);
                   }
            });
        }
    } );

Tentei fazer dessa forma e não obtive sucesso, pois a rotina faz a substituição dos elementos e logo após não acontece mais nada, nem no console do navegador, nem do eclipse, nem envia e recebe dado algum, o script esta bloqueando o fluxo de informações, mas não sei exatamente onde. Segue o code:

$(document).ready(function() {
 $('button[id*="filtrarData_"]').click(function (){
            var pegaData = $(this).val();
            console.log(pegaData);
            tbody(pegaData);
        });
        //{"dataAntUrl":"05/2017","dataAtuUrl":"06/2017","dataPosUrl":"07/2017"}
        function tbody(date){
            var urlData = "datas/" + date;
            console.log(urlData);    

            $.ajax({
                url: urlData,
                beforeSend: function(){
                    console.log("Carregando..");
                },
                success: function(retorno){

                    console.log("Retorno = " + retorno);
                    var obj = JSON.parse(retorno);
document.getElementById("previous").innerHTML = '<button id="filtrarData_' + obj.dataAntUrl + '" onclick="tbody(date)"'
                        + 'class="btn btn-default btn-outline pull-left" value=' + obj.dataAntUrl + '>'
                        + '<span aria-hidden="true"><i class="icon wb-chevron-left-mini"'
                        + 'aria-hidden="true"></i>' + obj.dataAntUrl + '</span></button>';
    document.getElementById("center").innerHTML = '<button id="filtrarData_' + obj.dataAtuUrl + '" onclick="tbody(date)"'
                        + 'class="btn btn-default btn-direction btn-outline btn-bottom" value=' + obj.dataAtuUrl + '>'
                        + obj.dataAtuUrl + '</button>';
    document.getElementById("next").innerHTML = '<button id="filtrarData_' + obj.dataPosUrl + '" onclick="tbody(date)"'
                        + 'class="btn btn-default btn-outline pull-right" value=' + obj.dataPosUrl + '>'
                        + obj.dataPosUrl + '<span aria-hidden="true"><i class="icon wb-chevron-right-mini"'
                        + 'aria-hidden="true"></i></span></button>';
                },
                error : function(a,b,c){
                       alert('Erro: '+a[status]+' '+c);
                   }
            });
        }
    } );

opa, perdão aqui pela demora. Me passei em acompanhar. Bom, realmente tem bastante html que precisa ser atualizado, mas qual o erro que aconteceu? Caso já tenha resolvido, foi mal mesmo. O código não parece errado e como vc pega os elementos pelo id, deveria funcionar o tempo todo.

solução!

Segue o jogo!