2012-11-02 42 views
3

我在我的MVC3-Webseite中有图片,他们必须每30秒更新一次。因为图像每30秒更新一次im服务器。所以我试图用JQuery来更新它:我如何更新我的MVC 3网站中的图像?

<div id="galerie"> 
    <ul> 
     <li> 
      <img id = "img1" class = "img1" alt="Image 7" src="@Url.Content("Content/Images/Image_7.jpg")"/> 
      Image 7 
     </li> 
     <li> 
      <img id = "img2" class = "img2" alt="Image 5" src="@Url.Content("Content/Images/Image_5.jpg")"/> 
      Image 5 
     </li> 

</div> 

<script type="text/javascript"> 
    function UpdateImages() { 
     $.get('@Url.Action("Details","Display", new { id = "test" })', function (data) { 
      $('#main').replaceWith(data); 
     }); 
    } 
    function myFunction() { 
     setInterval(UpdateImages, 30000); 
    } 
</script> 

但是问题是图像没有被更新。他们需要再次Pageload。不是吗? 所以我想知道我怎么能用JS解决Pageload事件?或者是否有解决问题的其他解决方案? 谢谢

MarekBurkut

+0

你在获得什么数据?以及你如何在这个数据中的图像网址? –

+0

我得到整个网站的正确内容。所以我把它替换为“$('#main')。replaceWith(data);”适当的页面片段。图片网址不会更改。它们总是一样的。这意味着URL永远不会改变。图像内容只有更改。 – burkut

回答

1

如果图像的URL不会改变,浏览器将假定它在缓存中仍然是正确的图像。

触发JS重载很简单:

document.location.href = document.location.href; 

每次更改href属性触发重新加载页面,即使该值不会改变。

为了确保图像实际上是从服务器再次加载的,您可能需要发送相应的缓存头。

或者,如果您不希望页面重新加载并只替换图像,则可以在图像URL中附加一个随机参数:../image1.jpg?p=121799595这将强制浏览器查询服务器。

编辑:或者,您可以通过MVC动作传递图像,以确保每次你得到一个新的副本:

public FileStreamResult StreamImage(string fileName) 
{ 
    // todo: Check whether the file actually exists and is an image 
    string path = AppDomain.CurrentDomain.BaseDirectory + "images/"; 
    return File(new FileStream(path + fileName, FileMode.Open), "image/jpeg", fileName); 
} 
+0

我很抱歉我的最后一条评论。真的它已经与重新加载。我没有看到它。谢谢你的镜头Neubauer – burkut

+0

我已经注意到,它现在重新加载图像只有相同的时间f.e.最多10次。那么它就不可靠。这意味着它随机重新加载更改的图像。我不知道如何解决随机重新加载更改图像的原因。 – burkut

+0

您是否发送带有图像的缓存标头?您可能必须通过操作传递图像,而不是链接到静态文件。 –

1

JQuery.get()被称为缓存的数据。考虑使用JQuery.ajax()来代替并设置cache:false。与.ajax(),你将有更多的控制你的代码。

function UpdateImages() { 
    $.ajax({ 
     type: "GET", 
     url: '@Url.Action("Details","Display")', 
     data: 'id=test', 
     cache: false, 
     success: function(data){ 
      $('#main').replaceWith(data); 
     }, 
     error: function(data){ 
      alert("error"); 
     } 
    }); 
}