我有一个网页,需要定期更新基于
在几种情况下。现在,我正在使用此:

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

  • 评论关闭
    IT序号网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!