无法弄清楚这个jQuery代码是如何工作的

时间:2014-09-17 19:54:42

标签: c# javascript jquery asp.net-mvc

因此,每隔几秒钟就有一台相机拍摄图像,并在服务器上存储带有新文件名的新图像。当向“mypage”发出请求时,服务器端将加载最新图像并在响应中返回。随后使用此jQuery代码刷新图像:

(function($) {

    $(function() {

        var refreshInterval = 5;   // Number of seconds between image refreshes

        $('#deskshare-grid img').each(function() {
            $(this).data('src', $(this).attr('src'));
        });

        function refreshImages() {
            $.get('?r=' + Math.random(), function(response) {
                $('#deskshare-grid img').each(function(index) {
                    $(this).attr('src', $(response).find('#deskshare-grid img').eq(index).attr('src'));
                });
                setTimeout(refreshImages, refreshInterval * 1000);
            });
        }

        setTimeout(refreshImages, refreshInterval * 1000);

    });

})(jQuery);

我共享的jQuery代码很有效,我没有编写代码,我想知道它是如何工作的。

我的想法是坚持为页面发出请求,使用C#在服务器上检索最新的图像,这些图像包含在响应中。创建更新的图像时,它具有新的文件名。

jQuery如何刷新照片以获取它不知道客户端的文件名?

特别是这部分代码令我困惑:

$.get('?r=' + Math.random(), function(response) {

这个$ .get的网址请求是什么?我看到我的F12工具的网络选项卡显示了新的图像响应,但我不明白如何使用jQuery请求具有不同文件名的图像。

更新

接受的答案是正确的,但我想详细说明。这个jQuery再次请求整个页面。 HTML响应包含来自服务器的新图像URL。 jQuery用于解析响应,获取最新的图像URL,然后使用从响应中解析出的新图像URL更新现有的HTML内容。这样,尝试刷新整个页面就没有页面闪烁。

3 个答案:

答案 0 :(得分:2)

它确实向同一页面发出请求,Math.random()是为了更容易查看每个请求。当您向同一页面的?发出请求时。

答案 1 :(得分:0)

  

此$ .get的网址请求是什么?

$ .get中的第一个参数是相对网址。这意味着它试图访问的网址将是www.yourdomain.com/whatever?r =。

“?”表示查询字符串的开头,“r”是请求变量的开头,等号后面的任何内容是查询本身。在这种特殊情况下,查询只是一个随机生成的数字,发送到服务器。在没有看到服务器端代码的情况下,它看起来好像是在客户端上生成文件名并以这种方式发送到服务器,然后可能用于在服务器端命名文件。

答案 2 :(得分:0)

$.get('?r=' + Math.random(), function(response) {可能是这两件事:

  1. 将URL更改为不获取缓存内容的技巧。
  2. 服务器端是虚拟还是我们不知道的东西。
  3. 我建议查看每个5''来电的请求和回复标题。