获取并查看图像 html
Fetch and view images html
我有下面的代码,可以从目录中获取图像并显示在 HTML 中。该目录中的图像每秒不断变化。它在桌面浏览器上有点工作,但我不能让它在移动浏览器上工作。它似乎总是在读取缓存的图像而不是从服务器重新加载。它可以通过在桌面浏览器上按 ctrl+F5 来工作,但不能在移动浏览器上工作。有没有办法通过 JavaScript 硬刷新移动浏览器 (chrome)?
<html>
<head>
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Expires" content="-1">
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
</head>
<body>
<img id="viewer" src="" width="100%"/>
<div id="info"> </div>
<button id="btnLeft" type="button">Left</button>
<button id="btnRight" type="button">Right</button>
<input type="button" value="Refresh page" onclick="location.reload(true);" />
<script>
$(function() {
var baseUrl = "./Cam01/";
var pictureIndex = 0;
var pictures = [];
function getFiles() {
$.ajax(baseUrl).success(function(data) {
pictures = [];
$(data).find("a[href]").each(function() {
var href = $(this).attr('href');
if (href.indexOf('.jpg') > 0 || href.indexOf('.png') > 0 || href.indexOf('.jpeg') > 0) {
pictures.push(href);
}
});
console.log(pictures.length + " pictures loaded!");
changePicture(0);
});
}
function changePicture(indexOffset) {
pictureIndex += indexOffset;
if (pictureIndex >= pictures.length) {
pictureIndex = 0;
} else if (pictureIndex < 0) {
pictureIndex = pictures.length - 1;
}
$('#viewer').attr('src', baseUrl + pictures[pictureIndex]);
$('#info').text((pictureIndex + 1) + "/" + pictures.length);
}
getFiles();
$('#btnLeft').click(function() {
var left = -1;
changePicture(left); return false;
});
$('#btnRight').click(function() {
var right = 1;
changePicture(right); return false;
});
$(document).keydown(function(e){
var left = -1, right = 1;
if (e.keyCode == 37) {
changePicture(left); return false;
} else if (e.keyCode == 39) {
changePicture(right); return false;
}
});
});
</script>
</body>
</html>
防止从缓存加载图像的一种方法是在其 URL.
后附加时间戳
这会导致资源看起来 "fresh" 因为它与上次加载时不同。
我更喜欢使用 "file modified" 时间戳,这样只有自上次加载以来发生变化的图像才会被刷新。未更改的图像可以从缓存中加载。但是,您似乎正在解析目录索引页,并且您无法使用该时间戳。
您可以将 current timestamp 附加到 URL 以防止缓存。但正如@Ajaypayne 所暗示的,这可能会导致不必要的高带宽使用,因为即使图像没有改变,它也会阻止缓存。
像这样:
var href = $(this).attr('href') + '?'+Date.now();
编辑
实际上,由于图像是在按下按钮时加载的,所以我会在 changePicture()
函数中添加时间戳,而不是在页面加载时添加:
$('#viewer').attr('src', baseUrl + pictures[pictureIndex] + '?'+Date.now());
编辑
顺便说一下,jQuery 的 .ajax()
函数接受 cache
参数用于 GET
请求:
cache (default: true, false for dataType 'script' and 'jsonp'
)
Type: Boolean
If set to false
, it will force requested pages not to be cached by the browser. Note: Setting cache
to false will only work correctly with HEAD and GET requests. It works by appending "_={timestamp}" to the GET parameters. The parameter is not needed for other types of requests, except in IE8 when a POST is made to a URL that has already been requested by a GET.
所以也许:
$.ajax({
url: baseUrl,
method: "GET",
cache: false
}).done(function(data) {
// process data here
});
我有下面的代码,可以从目录中获取图像并显示在 HTML 中。该目录中的图像每秒不断变化。它在桌面浏览器上有点工作,但我不能让它在移动浏览器上工作。它似乎总是在读取缓存的图像而不是从服务器重新加载。它可以通过在桌面浏览器上按 ctrl+F5 来工作,但不能在移动浏览器上工作。有没有办法通过 JavaScript 硬刷新移动浏览器 (chrome)?
<html>
<head>
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Expires" content="-1">
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
</head>
<body>
<img id="viewer" src="" width="100%"/>
<div id="info"> </div>
<button id="btnLeft" type="button">Left</button>
<button id="btnRight" type="button">Right</button>
<input type="button" value="Refresh page" onclick="location.reload(true);" />
<script>
$(function() {
var baseUrl = "./Cam01/";
var pictureIndex = 0;
var pictures = [];
function getFiles() {
$.ajax(baseUrl).success(function(data) {
pictures = [];
$(data).find("a[href]").each(function() {
var href = $(this).attr('href');
if (href.indexOf('.jpg') > 0 || href.indexOf('.png') > 0 || href.indexOf('.jpeg') > 0) {
pictures.push(href);
}
});
console.log(pictures.length + " pictures loaded!");
changePicture(0);
});
}
function changePicture(indexOffset) {
pictureIndex += indexOffset;
if (pictureIndex >= pictures.length) {
pictureIndex = 0;
} else if (pictureIndex < 0) {
pictureIndex = pictures.length - 1;
}
$('#viewer').attr('src', baseUrl + pictures[pictureIndex]);
$('#info').text((pictureIndex + 1) + "/" + pictures.length);
}
getFiles();
$('#btnLeft').click(function() {
var left = -1;
changePicture(left); return false;
});
$('#btnRight').click(function() {
var right = 1;
changePicture(right); return false;
});
$(document).keydown(function(e){
var left = -1, right = 1;
if (e.keyCode == 37) {
changePicture(left); return false;
} else if (e.keyCode == 39) {
changePicture(right); return false;
}
});
});
</script>
</body>
</html>
防止从缓存加载图像的一种方法是在其 URL.
后附加时间戳
这会导致资源看起来 "fresh" 因为它与上次加载时不同。
我更喜欢使用 "file modified" 时间戳,这样只有自上次加载以来发生变化的图像才会被刷新。未更改的图像可以从缓存中加载。但是,您似乎正在解析目录索引页,并且您无法使用该时间戳。
您可以将 current timestamp 附加到 URL 以防止缓存。但正如@Ajaypayne 所暗示的,这可能会导致不必要的高带宽使用,因为即使图像没有改变,它也会阻止缓存。
像这样:
var href = $(this).attr('href') + '?'+Date.now();
编辑
实际上,由于图像是在按下按钮时加载的,所以我会在 changePicture()
函数中添加时间戳,而不是在页面加载时添加:
$('#viewer').attr('src', baseUrl + pictures[pictureIndex] + '?'+Date.now());
编辑
顺便说一下,jQuery 的 .ajax()
函数接受 cache
参数用于 GET
请求:
cache (default:
true, false for dataType 'script' and 'jsonp'
)
Type: Boolean
If set tofalse
, it will force requested pages not to be cached by the browser. Note: Settingcache
to false will only work correctly with HEAD and GET requests. It works by appending "_={timestamp}" to the GET parameters. The parameter is not needed for other types of requests, except in IE8 when a POST is made to a URL that has already been requested by a GET.
所以也许:
$.ajax({
url: baseUrl,
method: "GET",
cache: false
}).done(function(data) {
// process data here
});