Atualizar parte da página (div)

92

Eu tenho um arquivo html básico que está anexado a um programa java. Este programa java atualiza o conteúdo de parte do arquivo HTML sempre que a página é atualizada. Desejo atualizar somente aquela parte da página após cada intervalo de tempo. Posso colocar a parte que gostaria de atualizar em a div, mas não tenho certeza de como atualizar apenas o conteúdo de div. Qualquer ajuda seria apreciada. Obrigado.

user760220
fonte

Respostas:

117

Use Ajax para isso.

Construa uma função que irá buscar a página atual via ajax, mas não a página inteira, apenas a div em questão do servidor. Os dados serão então (novamente via jQuery) colocados dentro do mesmo div em questão e substituirão o conteúdo antigo por um novo.

Função relevante:

http://api.jquery.com/load/

por exemplo

$('#thisdiv').load(document.URL +  ' #thisdiv');

Observe que o carregamento substitui automaticamente o conteúdo. Certifique-se de incluir um espaço antes do seletor de id.

user1721135
fonte
6
Ei cara, acabei de descobrir que falta um espaço após o '(dois pontos à direita?), Este exemplo não funcionou fora da caixa :-) $ (' # thisdiv '). Load (document.URL +' # thisdiv ');
David Reinberger
16
Esse método tem uma grande desvantagem. Se você usar isso e a parte da página recarregar, você não poderá fazer a mesma ação JQuery / Ajax novamente sem recarregar a página inteira no navegador. Após a recarga com este método, o JQuery não é inicializado / não funcionará novamente.
Marcel Wasilewski
2
tem certeza de que precisamos de um espaço antes de # tag? Trabalhei para mim se remover #tag.
Kurkula
2
@GregHilston aqui está meu código js $ ('# dashboard_main_content'). Load (document.URL + '#dashboard_content'); e aqui está meu HTML <div class = "col-lg-12" id = "dashboard_main_content"> <div id = "dashboard_content"> Conteúdo </div> </div>
Touhami
2
$('#thisdiv').load(document.URL + ' #thisdiv>*')evita ter outro #thisdivdentro do original#thisdiv
Pedro
17

Vamos supor que você tenha 2 divs dentro de seu arquivo html.

<div id="div1">some text</div>
<div id="div2">some other text</div>

O próprio programa java não pode atualizar o conteúdo do arquivo html porque o html está relacionado ao cliente, enquanto o java está relacionado ao back-end.

Você pode, entretanto, comunicar-se entre o servidor (back-end) e o cliente.

Estamos falando de AJAX, que você consegue usando JavaScript. Recomendo usar jQuery, que é uma biblioteca JavaScript comum.

Vamos supor que você deseja atualizar a página a cada intervalo constante e, em seguida, pode usar a função de intervalo para repetir a mesma ação a cada x vezes.

setInterval(function()
{
    alert("hi");
}, 30000);

Você também pode fazer assim:

setTimeout(foo, 30000);

Onde foo é uma função.

Em vez do alerta ("oi"), você pode executar a solicitação AJAX, que envia uma solicitação ao servidor e recebe algumas informações (por exemplo, o novo texto) que você pode usar para carregar no div.

Um AJAX clássico se parece com isto:

var fetch = true;
var url = 'someurl.java';
$.ajax(
{
    // Post the variable fetch to url.
    type : 'post',
    url : url,
    dataType : 'json', // expected returned data format.
    data : 
    {
        'fetch' : fetch // You might want to indicate what you're requesting.
    },
    success : function(data)
    {
        // This happens AFTER the backend has returned an JSON array (or other object type)
        var res1, res2;

        for(var i = 0; i < data.length; i++)
        {
            // Parse through the JSON array which was returned.
            // A proper error handling should be added here (check if
            // everything went successful or not)

            res1 = data[i].res1;
            res2 = data[i].res2;

            // Do something with the returned data
            $('#div1').html(res1);
        }
    },
    complete : function(data)
    {
        // do something, not critical.
    }
});

Onde o backend é capaz de receber dados POST'ed e é capaz de retornar um objeto de dados de informação, por exemplo (e muito preferível) JSON, existem muitos tutoriais por aí com como fazer isso, GSON do Google é algo que eu usado há algum tempo, você poderia dar uma olhada nele.

Não sou profissional com o recebimento do Java POST e o retorno de JSON desse tipo, então não vou dar um exemplo com isso, mas espero que seja um bom começo.

Jonast92
fonte
Seu exemplo Ajax, como você atualiza ao vivo?
TheCrazyProfessor
10

Você precisa fazer isso no lado do cliente, por exemplo, com jQuery.

Digamos que você queira recuperar HTML em div com ID mydiv:

<h1>My page</h1>
<div id="mydiv">
    <h2>This div is updated</h2>
</div>

Você pode atualizar esta parte da página com jQuery da seguinte maneira:

$.get('/api/mydiv', function(data) {
  $('#mydiv').html(data);
});

No lado do servidor, você precisa implementar o manipulador para solicitações que chegam /api/mydive retornar o fragmento de HTML que vai dentro do mydiv.

Veja este Fiddle que fiz para você como um exemplo divertido usando jQuery get com dados de resposta JSON: http://jsfiddle.net/t35F9/1/

jsalonen
fonte
Um exemplo legal e fácil. Podemos encontrar alguma desvantagem nisso?
Luigi Lopez
3

Use fetche innerHTMLpara carregar conteúdo div

Kamil Kiełczewski
fonte
1

$.ajax(), $.get(), $.post(), $.load()funções do jQuery enviam XML HTTPsolicitação internamente . entre estes, o load()é dedicado apenas a um determinado DOM Element. Veja jQuery Ajax Doc . Os detalhes do controle de qualidade estão aqui .

Sr. Mak
fonte