我们使用具有JsonP机制的动态脚本标记来实现跨域Ajax调用。前端小部件非常简单。它只是调用搜索Web服务,传递用户提供的搜索条件并接收并动态呈现结果。如何防止IE缓存导致重复的Ajax请求?
注意 - 对于那些不熟悉的动态脚本标签与执行类似Ajax的请求到服务的JSONP方法返回JSON格式的数据,我可以解释如何利用它,如果你认为它可能与问题有关。
该服务是WCF托管在IIS上。这是Restful,所以当用户点击搜索时我们做的第一件事就是生成一个包含条件的Url。它看起来像这样...
然后,我们使用动态创建的HTML脚本代码设置到上述网址的来源属性,使要求我们的服务。结果返回,我们处理它以显示结果。
这一切工作正常,但我们注意到,当使用IE服务收到来自客户端的请求两次。我用小提琴手来监视流量离开浏览器果然我看到两个请求与以下网址...
- 请求1:https://.../service.svc?criteria=john+smith
- 请求2:https://.../service.svc?criteria=john+smith&_=123456789
第二个请求已附加了某种Id。每个请求的Id都不相同。
我的直接想法是它与缓存有关。在网址末尾添加随机数是禁用浏览器缓存的经典方法之一。为了证明这一点,我调整了IE中的缓存设置。
我将“检查更新版本的存储页面”设置为“从不” - 这导致每次只产生一个请求。结尾有随机数的那个。
我将此设置值重新设置为默认值“自动”,并且请求立即开始再次发送两次。
有趣的是,我没有收到客户的两个请求。我发现这reference有人建议这可能是一个与IE浏览器的错误。 Firefox上这种情况不会发生,这一事实支持这一理论。
- 任何人都可以确认这是否与IE浏览器的错误?这可能是设计。
- 有谁知道我可以阻止它发生的一种方式吗?
我的用户运行的一些比较模糊的搜索占用了足够的处理资源,使任何一个非常糟糕的想法翻倍。我真的想避免这种情况,如果在所有可能:-)
对于我来说,看起来像是一个非常好的开始。如果事实证明有帮助,我会尽快接受。感谢您及时的回复! – 2009-06-05 15:16:50