单击时从外部URL刷新图像

时间:2014-05-12 10:25:29

标签: javascript jquery image refresh partial-page-refresh

我有一个用Ruby on Rails构建的仪表板,它从网络摄像头获取图像并以jpg格式提供它们。

我在每张图片上都有一个刷新按钮,希望能够单独刷新每张图片而不刷新整个页面。

 <% @shares.each do |camera| %>
    <div class="col-md-4 col-sm-6 col-xs-12 cam-box">
        <a href="/cameras/<%= camera['id'] %>">
           <div id="cam-name"><h5><%= camera['name'] %></h5></div>
              <img src="<%= camera['jpg'] %>" alt="">
                <a href="#" id="cam-refresh" class="refresh"><span class="glyphicon glyphicon-refresh"></span></a>
           </div>
        </a>
    </div>
 <% end %>

有谁知道我如何用Jquery实现这个目标?

感谢任何建议。

2 个答案:

答案 0 :(得分:0)

您要做的是异步更新图像。你可以使用jQuery的.ajax()

来做到这一点

这是你如何做到的:

// Set up an onClick listener for the refresh button
// Make sure each refresh button has a class "cam-refresh"
$(".cam-refresh").click(function() { 
    var $img = $(this).closest("img"), // Find the closest image
        url = "filename.extension";    // The script that will return new image url

    // Make a request to that URL to obtain a new src parameter
    $.get(url, function() {
        alert('Request has been submitted');
    })
    .done(function(data) {
        alert( "second success" );
        $img.attr("src", data.src);
    })
    .fail(function() {
        alert( "error" );
    })
    .always(function() {
        alert( "finished" );
    });
});

答案 1 :(得分:0)

由于您只需更新图像而无需新的src网址,因此您可以执行以下操作...

$("a.refresh").on("click", function(e) {
    e.stopPropagation();
    var $img = $(this).closest("img");
    var src = $img[0].src;
    src = src.substr(0, src.search("?")) + "?" + new Date().getTime();
    $img[0].src = src;
});

这将获取当前图像src并在其末尾附加时间戳,从而导致重新加载(而不是仅使用相同的URL并且可能无法从缓存加载或加载)。

此外,您目前已将其应用于所有刷新链接。您应该为每个ID应用唯一的ID(只需为每个ID附加一个递增值)。

最后,我添加了e.stopPropagation(),以便外部链接不会对您点击刷新链接做出反应,否则点击会冒泡,您最终会更改页面。

相关问题