我有一个网页,需要定期更新基于
在几种情况下。现在,我正在使用此:
<html>
<head>
<meta http-equiv="refresh" content="3">
</head>
<body>
<img src="${createLink(controller:'advertisment',action:'viewImage',id:advertismentInstance.id)}"/>
</body>
</html>
但这会导致网页的重新加载,所以我希望这样做
与Ajax一起使用(我也使用了Prototype框架,这在Grails中是默认的)。
提供广告 Controller 方法:
def viewImage = {
log.info("before view Image")
def adv = Advertisment.get(params.id)
byte[] image = adv.fileContent
response.outputStream << image
log.info("after view Image")
}
设备 Controller 方法:
def showAdv =
{
log.info("showAdv start")
def deviceInstance = Device.get(params.id)
int totalNumberOfAdv = deviceInstance.advertisment.size();
Random rand = new Random()
int advToShow = rand.nextInt(totalNumberOfAdv+1) - 1;
def advertismentInstance = deviceInstance.advertisment.toArray()[advToShow]
if(advertismentInstance)
{
render(view: "image", model: [deviceInstance :deviceInstance,advertismentInstance: advertismentInstance])
}
else
{
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'advertisment.label', default: 'Advertisment'), params.id])}"
}
log.info("showAdv end")
}
请您参考如下方法:
<img/>一个ID:<img id="foo" src="..."/><!-- keep the existing src -->
<meta/>。 </body>标记之前,添加以下内容:<script>
var img = document.getElementById('foo'); // id of image
setInterval(function() {
var stamp = new Date().getTime();
img.setAttribute('src', img.getAttribute('src') + '?_=' + stamp);
}, 3000);
</script>
viewImage操作以在渲染图像之前实际进行随机化。这可能意味着将showAdv的一部分合并为viewImage。 



