Atualização automática via AJAX

Olá pessoal,

quero saber como posso fazer para atualizar via ajax chamando um controller (como normalmente é feito).

Agradeço desde já.

Acácio,

Depende da finalidade, se deseja que a cada segundo busca os resultados alterados. Você vai precisar criar uma tarefa cron para alterar os dados, e uma função em javascript que se chama setTimeout().

Eu fiz uma vez um site de leilão com contagem regressiva, vo postar o código javascript, ai você vai entender um pouco o funcionamento.




ar timerI = null;

var timerR = false;


function stopLance(){

    if(timerR)

        clearTimeout(timerI)

    timerR = false;

}


function startLance(){

    stopLance();

    f1();

}


function f1(){


    $.ajax({

        type: 'GET',

        url: '_refresh.php', // aqui você adiciona a URL do seu controller com sua action

        dataType: 'json',

        cache: false,

        success: function(data){...}

    });

    


    timerI = setTimeout("f1()", 1000);

    timerR = true;

}




Colocar em um arquivo .js e adiciona a página principal no body.


<body onload="javascript:startLance();">

Deu uma clareada no que eu preciso. Mas ele irá atualizar a página toda ou só uma div? Eu estou fazendo uma aplicação de pedidos, onde esses pedidos serão atualizados a cada segundo, sendo que não dê refresh na página toda, somente na div.

No caso eu colocaria


onload="javascript:startLance();"

na DIV que eu quero que atualize?

Obrigadão cara pela atenção.

Acácio,

Está usando CGridView ou CListView?

Case esteja usando um dos dois, no $.ajax() faz assim:


$.ajax({

        type: 'GET',

        url: '_refresh.php', // aqui você adiciona a URL do seu controller com sua action

        dataType: 'json',

        cache: false,

        success: function(data){

                    $.fn.yiiGridView.update('table-grid');

                 }

    });

No ‘success’ que você vai estipular o que deseja atualizar, uma div, um gridview, um listview.

Sobre o onload, coloca somente no <body> que estipula que ele só vai ler(load) a função depois que toda a página estiver carregada.

Newerton, obrigado cara pela ajuda. Vou testar aqui, ai posto como eu fiz.

Que Deus te abençoe.

Até mais!