none
Dúvida com a utilização do JavaScript/Ajax ASP.NET MVC3 RRS feed

  • Pergunta

  • Olá, estou utilizando o código javascript abaixo para atualizar uma div, contudo , o mesmo soh atualiza no primeiro click... alguém poderia me esclarecer? obrigado!

    <script>
    
        $(function () {
            $("#btnAtualizar").click(function () {
                $("#Conteudo").load("/file/get/");
            });
        });
    
    </script>
    
    @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    <h2>Arquivos</h2>
    
    <div id="Conteudo">
    
    </div>
    
    <input type='button' value='Atualizar' id='btnAtualizar' />


    No controller o seguinte código foi colocado:

     

      public ActionResult get()
            {
    
                List<Arquivo> ls = new List<Arquivo>();
    
                foreach (string file in Directory.GetFiles(@"C:\files", "*.txt"))
                {
                    FileInfo f = new FileInfo(file);
                    Arquivo arq = new Arquivo()
                    {
                        nome = f.Name
                    };
                    //StreamReader reader = new StreamReader(file);
                    //Console.WriteLine(reader.ReadToEnd());
                    ls.Add(arq);
                }
    
                return PartialView("_Arquivos", ls);
            }


    Uma outra questão é como faço para que em tempos em tempos atualize a div nesta página...

     

    Muito obrigado!

    quarta-feira, 28 de dezembro de 2011 11:13

Respostas

  • Opa!

     

    Então, na verdade a função esta fazendo sua obrigação, porém, o IE e seu mega cache, não retorna o valor correto para o load do JQuery.

    para evitar problemas de cache com o IE, adicione um ID aleatório à url solicitada:

     

     

    function LoadFiles() {
            $("#Conteudo").load("/files/get?id=" + Math.random() * 99999);
            setTimeout(function () {LoadFiles()}, 5 * 1000);
        }
    

     


    após o /files/get adicionei um paramentro ID com um número aleatório, testei e funcionou.

     

    Abraços!


    quarta-feira, 28 de dezembro de 2011 13:30

Todas as Respostas

  • Olá Ivaldo;

     

    Fiz alguns testes exatamente com o mesmo código postado e funcionou corretamente, eu utilizo o Google Chrome para debugar, ajuda muito.

    Para fazer a atualização automática: 

    <script type="text/javascript">
        $(function () {
            LoadFiles();
        });
    
        function LoadFiles() {
            $("#Conteudo").load("/file/get/");
            setTimeout(function () {LoadFiles()}, 5 * 1000);
        }
    </script>
    

    para alterar o intervalo de tempo, altere em  5 * 1000.

     

    Espero ter ajudado.

     

     

    quarta-feira, 28 de dezembro de 2011 12:40
  • Obrigado cara! funciona sim! Mas teria que funcionar no I.E. 9  não acha? Conhece algum script mais amigável para o nosso I.E. de cada dia? hehe

     

    abs

     

     


    quarta-feira, 28 de dezembro de 2011 12:46
  • Opa!

     

    Então, na verdade a função esta fazendo sua obrigação, porém, o IE e seu mega cache, não retorna o valor correto para o load do JQuery.

    para evitar problemas de cache com o IE, adicione um ID aleatório à url solicitada:

     

     

    function LoadFiles() {
            $("#Conteudo").load("/files/get?id=" + Math.random() * 99999);
            setTimeout(function () {LoadFiles()}, 5 * 1000);
        }
    

     


    após o /files/get adicionei um paramentro ID com um número aleatório, testei e funcionou.

     

    Abraços!


    quarta-feira, 28 de dezembro de 2011 13:30
  • Pessoal,

    Só complementando a discussão, o jQuery nos permite dasabilitar o cache de toda requisição ajax, de forma global.

    Basta você usar o $.ajaxSetup:

    $.ajaxSetup({
      cache: false
    });

    Na prática, o jQuery adiciona na querystring um parâmetro (_=[TIMESTAMP]) em todas as requisições, que é mais ou menos o que você está fazendo.

     


    Forte abraço,

    André Borges Medeiros
    MCT, MCPD, MCTS

    Procurando treinamento de ASP.NET MVC?

    >> Se a resposta solucionar sua dúvida, favor Votar como Útil
    quinta-feira, 29 de dezembro de 2011 12:56
    Moderador