Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

João Arruda

[Resolvido] Preload com gif

Recommended Posts

Seguinte... Estou criando um projeto de teste de servidores. Ele pega os IPs de dentro de um arquivo .txt (não achei necessário criar um BD) e envia Ping para cada um deles (em torno de 15), mostrando os resultados do Ping (como tempo de resposta, velocidade da conexão calculada, status, etc) numa tabela HTML simples. Esta tabela é atualizada de 30 em 30 segundos e está dentro de um iFrame, para poder atualizar sem mexer nos dados extra da página.

O meu problema é que a tabela demora um tanto para pegar o IP dentro do .txt, enviar a requisição para o servidor e receber a resposta. Gostaria que, enquanto está rolando o teste no servidor, uma imagem .gif como um preloader aparecesse no lugar da tabela e, quando o processo estivesse concluído, mostrasse a tabela completa (para o usuário não pensar que deu bug).

Alguém tem alguma ideia de como posso fazer?

Também seria legal se a cada servidor verificado, ele fosse sendo incluído na tabela, independentemente dos outros... Isso fica mais como um desafio para os colegas da comunidade :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

João

 

tenta utilizar o Response.Flush();

exemplo: http://www.superasp.com.br/paginas_exibir_detalhes.asp?dep=36,0&id=319

 

uma vez utilizei isso em uma página de backup, onde eu fazia backup, zipava e envia o email e colocava mensagens entre as tarefas, creio que para o seu caso pode ser que seja uma das possíveis soluções.

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

eriva_br,

 

Tentei usar o Response.Flush agora mesmo, de vários modos... Até fiz uma chamada desde método dentro do source, mas nem assim funcionou.

Aqui está o meu source:

 

<body>   
<asp:Image runat="server" id="Img1" ImageUrl="~/img/carregando.gif" style="position:absolute"/>
<!--esta é a imagem que identifica o carregamento da página-->
   <form id="form1" runat="server">
   <div id="ajuda" style='font-weight:bold;visibility:hidden;position:absolute;height:auto;width:auto;border-style:solid;background-color:#DDEE44;border-color:#EEFF11;filter:Alpha(opacity:85);z-index:12000'></div> <!--perfumaria...-->
   <div id="divisao" runat="server">
<!--início da tabela em que vou colocar a resposta dos servidores-->
       <table border='7' style='height:775px;font-family:Calibri;font-size:auto;padding:0;margin:0;'>
       <thead>
       <tr style='background-color:#DDDDFF;font-weight:bold;height:50px'>
       <td onmouseover='exibeAjuda(alias);' onmouseout='escondeAjuda();'>Alias</td>
       <td onmouseover='exibeAjuda(ip);' onmouseout='escondeAjuda();'>IP</td>
       <td onmouseover='exibeAjuda(ultimoping);' onmouseout='escondeAjuda();'>Último Ping</td>
       <td onmouseover='exibeAjuda(tempoderesposta);' onmouseout='escondeAjuda();'>Tempo de Resposta</td>
       <td onmouseover='exibeAjuda(velocidade);' onmouseout='escondeAjuda();'>Velocidade</td>
       <td onmouseover='exibeAjuda(status);' onmouseout='escondeAjuda();'>Status</td>
       </tr>
      <!--tentei chamar o Response.Flush aqui-->
       </thead>
       <tbody id="tbody" runat="server">
<!--é aqui que eu coloco a resposta dos servidores, mas o código eu escrevi no behind-->
       </tbody>
       </table>        
   </div>
   <img id="ImageButton1" runat="server" src="img/refresh.png" style="height:40px; width:40px ;top:0; position:absolute;cursor:hand" onmouseover="exibeAjuda(recarrega);" onmouseout="escondeAjuda();" onclick="atualiza();" /> <!--outra perfumaria...-->
   </form>
</body>

 

Também tentei colocar o Response.Flush antes de iniciar o método que mandava o Ping...

Alguma outra sugestão? :S

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem que colocar o comando Response.Flush(); lá no code behind

 

deixa tb. setado essas duas opções no page_load:

   Response.BufferOutput = false;
   Response.Buffer = true;

 

sugestão para mostrar a mensagem no html, no meu caso deixei uma div com id="Texto" e runat="server"

   public void InsereMensagem(string Message)
   {
       Response.BufferOutput = false;
       Response.Write("<script>");
       Response.Write("document.getElementById('ctl00_cphMaster_Texto').innerHTML += '" + Server.HtmlEncode(Message).Replace("<", "<").Replace(">", ">") + "';");
       Response.Write("</script>");
       Response.Flush();
   }

OBS. nem usei o clientID..rss

 

EDIT:

fiz um teste rápido, pois faz muito tempo que fiz esse esquema do flush, no teste aqui funcionou mas tive que colocar a execução na página aspx entre <% %>

 

Flush.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Flush.aspx.cs" Inherits="WebApplication2.Flush" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>


<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<div id="Texto" runat="server" ></div>

<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />

<%
   if (IsPostBack)
   {
       InsereMensagem("<br>iniciando");
       System.Threading.Thread.Sleep(3000);
       InsereMensagem("<br>fase 1");
       System.Threading.Thread.Sleep(3000);
       InsereMensagem("<br>fase 2");
       System.Threading.Thread.Sleep(3000);
       InsereMensagem("<br>fase 3");
   }
    %>

</asp:Content>

 

Flush.aspx.cs

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication2
{
   public partial class Flush : System.Web.UI.Page
   {
       protected void Page_Load(object sender, EventArgs e)
       {
           //Response.Buffer = true;
           if (!IsPostBack)
           {
               //Response.BufferOutput = false;
               //Response.Buffer = true;
           }
           //Response.Flush();
       }

       protected void Button1_Click(object sender, EventArgs e)
       {

       }

       public void InsereMensagem(string Message)
       {
           Response.BufferOutput = false;
           Response.Write("<script>");
           Response.Write("document.getElementById('" + Texto.ClientID + "').innerHTML += '" + Server.HtmlEncode(Message).Replace("<", "<").Replace(">", ">") + "';");
           Response.Write("</script>");
           Response.Flush();
       }
   }
}

 

OBS.: quando tentei colocar o código no evento Button1_Click não funcionou a parte do flush, o código é executado, mas durante o processo e no final não mostrou nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, cara... Será que a resposta está em executar o programa entre <% %> ?

Porque eu tentei fazer o Flush aqui no Page_Load, desse jeito:

 protected void Page_Load(object sender, EventArgs e)
   {
       Response.BufferOutput = false;               
       Response.Write("<img src='img/carregando.gif' alt='Carregando' style='position:absolute'/>");
       Response.Flush();
       /*código para chamar o Ping e desenhar as linhas da tabela*/
   }

Mas do mesmo jeito, estava carregando a página inteira de uma só vez, demorando todo aquele tempo pra requisição de Ping, e mostrando a imagem de carregamento JUNTO com a tabela pronta...

 

Vou tentar fazer executando o código direto no source...

 

Ah mlk!

 

Consegui! Era realmente chamar a função principal no source e colocar a mensagem antes...

 

Valeu por tudo, cara!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.