3

私のMVC3-Webseiteには、30秒ごとに更新する必要がある画像があります。画像はサーバー上で 30 秒ごとに更新されるためです。だから私は次のようなJQueryでそれを更新しようとしました:

<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>

しかし問題は、画像がまだ更新されていないことです。再度ページロードする必要があります。そうじゃない?JSでPageloadイベントを発生させる方法を知りたいですか? または、問題に対する他の解決策はありますか? ありがとうございました

マレク・ブルクト

4

2 に答える 2

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");
        }
    });
}
于 2012-11-02T17:57:59.223 に答える
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);
}
于 2012-11-02T08:48:28.783 に答える