Sobes.tech
Junior

Como é que o cliente pode perceber que os dados do servidor foram recebidos com sucesso e exibidos no navegador?

sobes.tech IA

Resposta da IA

O JavaScript do cliente pode rastrear a receção e exibição bem-sucedidas de dados de várias formas:

  • Requisições AJAX: Quando se usam XMLHttpRequest ou Fetch API, o sucesso é determinado pelo estado da resposta HTTP. Os códigos de estado na faixa de 200-299 são considerados bem-sucedidos.

    // Exemplo com Fetch API
    fetch('/api/data')
      .then(response => {
        if (response.ok) { // Verifica o estado HTTP (200-299)
          return response.json();
        } else {
          throw new Error('Erro do servidor: ' + response.status);
        }
      })
      .then(data => {
        // Dados recebidos com sucesso e prontos a serem exibidos
        console.log('Dados recebidos com sucesso:', data);
        // Lógica para exibir dados no navegador
        displayData(data);
      })
      .catch(error => {
        // Tratamento de erros na requisição
        console.error('Erro ao obter dados:', error);
      });
    
    function displayData(data) {
        // Lógica para inserir data no DOM e verificar renderização bem-sucedida
        const element = document.getElementById('data-container');
        if (element) {
            element.innerText = JSON.stringify(data, null, 2); // Exemplo de inserção
            // Pode adicionar uma verificação de que o elemento com os dados apareceu no DOM
            if (document.contains(element)) {
                console.log('Dados exibidos com sucesso no DOM.');
            }
        }
    }
    
  • WebSockets: O sucesso na receção de dados é determinado pelo evento onmessage. Exibir dados no navegador requer lógica adicional após a receção da mensagem.

    const socket = new WebSocket('ws://localhost:8080/ws');
    
    socket.onopen = function(event) {
      console.log('Conexão WebSocket estabelecida.');
    };
    
    socket.onmessage = function(event) {
      console.log('Dados recebidos via WebSocket:', event.data);
      // Dados recebidos, agora podem ser exibidos
      displayDataFromWebSocket(event.data);
    };
    
    socket.onerror = function(event) {
      console.error('Erro WebSocket:', event);
    };
    
    socket.onclose = function(event) {
      if (event.wasClean) {
        console.log(`Conexão WebSocket fechada limpidamente, código=${event.code}, motivo=${event.reason}`);
      } else {
        console.error('Conexão WebSocket interrompida');
      }
    };
    
    function displayDataFromWebSocket(data) {
        // Lógica de exibição de dados recebidos via WebSocket
        const element = document.getElementById('websocket-data');
        if (element) {
            element.innerText = data;
            // Verificação de renderização bem-sucedida
            if (document.contains(element)) {
                console.log('Dados do WebSocket exibidos com sucesso.');
            }
        }
    }
    
  • Formulários HTML: Ao usar formulários HTML tradicionais e redirecionamentos, o sucesso é determinado pelo carregamento de uma nova página com o conteúdo esperado. O script do cliente na nova página pode verificar a presença de dados no DOM após o seu carregamento (DOMContentLoaded).

  • Modelos do lado do servidor: Se os dados forem incorporados do lado do servidor (por exemplo, usando JSP, Thymeleaf), a receção e exibição bem-sucedidas ocorrem simultaneamente com o carregamento da página. O script do cliente pode verificar a presença de elementos com dados após o evento DOMContentLoaded.

  • Verificações no DOM: Após inserir dados no Modelo de Objeto do Documento (DOM), o JavaScript pode verificar a existência, conteúdo ou propriedades dos elementos adicionados.

    // Exemplo de verificação da existência de um elemento após inserir dados
    const dataElement = document.getElementById('rendered-data-id');
    if (dataElement && dataElement.innerText !== '') {
        console.log('Dados exibidos com sucesso no DOM.');
    }
    

É importante entender a diferença entre "obter dados" (resposta HTTP bem-sucedida ou mensagem WebSocket) e "exibir no navegador" (integração de dados no DOM e seu render). A receção bem-sucedida não garante uma exibição instantânea e correta, que depende da lógica do cliente.