ajax发送后台请求到服务器,服务器程序作出新图,但并不发送到客户端,
经过ajax后处理后,重新设置图片img的src可以获得新图,但此方法不稳定,有的时候并未显示新图,而且我要同时刷新100多个图,因此我想我不能把图片发送到客户端再一个一个图的设置url(此时的url是ajax请求的url)。
这个问题很久没完美的解决,请帮忙
经过ajax后处理后,重新设置图片img的src可以获得新图,但此方法不稳定,有的时候并未显示新图,而且我要同时刷新100多个图,因此我想我不能把图片发送到客户端再一个一个图的设置url(此时的url是ajax请求的url)。
这个问题很久没完美的解决,请帮忙
解决方案 »
- 怎么查询并删除(jedis)
- java 登录记住我
- 一道关于树形结构存储的算法题
- 急求一份用jsp+JAVASCRIPT实现树型菜单的代码
- 我想写一段代码,当tomcat一启动就能读取某个固定不变字符,然后到处可以引用,当tomcat关闭时才能消失,该如何做?
- 请各位帮忙 hibernate save导致操作异常
- 请问如何在IE中打开mht文件?今天结贴!
- 为什么当我在一个 Pop-up的窗口里面 取SESSION值得到的却是 为空,帮忙解答一下!!
- Tomcat 和 resin 那个做web服务器好?
- 请问各位大虾:是否只要装了jdk1.3和jswdk1.0.1后就可以直接解释servlet?
- 一个JSP搜索代码,郁闷中,请求帮助
- 救命啊!!!!!!!!!(公司快吃我了)急!!!!!!!!!!!!!!!!
img.src="xxxx/yyy.jpg?zzz="+ new Date().getTime()
保证URL不一样
的时候我便开始重新设置img.src,其实和原来的src是一样的
[]内可以省略现在我的意思就是你重新设置img.src的时候,加上query string,不管什么,只要每次都不一样。
服务器处理的时候,前面协议号,域名,端口,路径等信息都不变,HTTP请求仍会正确地指向你的图形文件。而由于你的图形文件不会处理query string,因而它对你的服务端而言是无用的。之所以添加它,其实是为了给客户端的浏览器看,让他知道,这是一个新的请求,别拿旧的本地cache唬弄我。这是一种比较简单的做法,但是不是最好的。
还有中做法,你可以写个<filter>,通过对response.setHeader,保证任何请求都客户端不缓存
<%
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
%>
我的意思是这个被ajax发送出的请求其实重新做出了10个图,所以我要把客户端的10个图的src都重新设置,把他们都设成一个url肯定不行了,我就干脆document.getElementById('img').src="images/1.jpg"(就是他初始的地址),大部分情况下这个图还是会变成新图的,
不过毕竟不是好方法
但因为图片态多我只好舍弃这个方法,我的那个方法并未把图片主动发往客户端
后来想想,我那个方法不稳定的原因可能是服务器还没完全作出图片就返回
req.readyState==4(READY_STATE_COMPLETE)req.status==200,导致我的后处理提前
刚才shine的方法我觉得只能刷新个别的图片,如果100多个图用100多个url重设太复杂了
希望继续有高手指点!
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
%>你是哪个里面的,输出图片用的,还是输出Ajax结果用的。输出Ajax结果的对图片没问题。假设你有2个图片要更新,分别对应服务器上
"images/1.jpg"和"images/1.jpg"
你ajax请求〉更新图片〉返回要更新的图片URL,
你的no-cache只是保证了你的ajax返回的结果是新的,也就是
document.getElementById('img').src="images/1.jpg"
这段代码是不错的,但是浏览器处理这个代码的时候,由于URL和本地cache中保存的一致,且由于<img src>是HTTP GET,GET方式是会优先去取cache的,所以会不正确。我是让你
document.getElementById('img').src="images/1.jpg" + "?sid=" + new Date().getTime()这样你每次去更新1.jpg的时候,浏览器得到的URL就类似
images/1.jpg?sid=123456789001
images/1.jpg?sid=999888777666
document.getElementById('img').src="images/1.jpg" + "?sid=" + new Date().getTime()
我测试过了,和过去是一样的,有些时候图片没变。
我还是怀疑servlet在调用另一个作图类还没把图做完就返回req.readyState==4(READY_STATE_COMPLETE)req.status==200,干脆让servlet返回个标记给客户端再做后处理吧