我们使用动态脚本标记和JsonP机制来实现跨域Ajax调用。前端小部件非常简单。它只是调用一个搜索Web服务,传递用户提供的搜索条件并接收和动态呈现结果。
注意-对于那些不熟悉使用动态脚本标记和JsonP方法执行返回Json格式数据的服务的Ajax-like请求的人,如果您认为它与问题有关,我可以解释如何使用它。
该服务托管在IIS上的WCF中。因此,当用户单击搜索时,我们首先生成一个包含条件的Url。它看起来像这样...
这一切都很好,但我们注意到在使用IE时,服务从客户端接收到请求两次。我使用Fiddler监视离开浏览器的流量,确实看到了两个请求,其URL如下...
我立即想到这与缓存有关。在url末尾添加一个随机数是禁用浏览器缓存的经典方法之一。为了证明这一点,我调整了IE中的缓存设置。
注意-对于那些不熟悉使用动态脚本标记和JsonP方法执行返回Json格式数据的服务的Ajax-like请求的人,如果您认为它与问题有关,我可以解释如何使用它。
该服务托管在IIS上的WCF中。因此,当用户单击搜索时,我们首先生成一个包含条件的Url。它看起来像这样...
我们随后使用动态创建的Html Script标签,其源属性设置为上述Url,向我们的服务发出请求。结果被返回,我们对其进行处理以显示结果。
这一切都很好,但我们注意到在使用IE时,服务从客户端接收到请求两次。我使用Fiddler监视离开浏览器的流量,确实看到了两个请求,其URL如下...
- 第一个请求: https://.../service.svc?criteria=john+smith
- 第二个请求: https://.../service.svc?criteria=john+smith&_=123456789
我立即想到这与缓存有关。在url末尾添加一个随机数是禁用浏览器缓存的经典方法之一。为了证明这一点,我调整了IE中的缓存设置。
我将“检查存储页面的新版本”设置为“从不” - 这导致每次只发出一个请求。带有随机数结尾的那个。
我将此设置值恢复为“自动”,请求立即再次发送两次。
有趣的是,客户端上我没有收到两个请求。我在参考中找到了这篇文章,其中有人建议这可能是IE的一个bug。Firefox上没有这种情况支持了这个理论。
- 有人能确认这是否是IE的一个bug吗?这可能是设计问题。
- 有人知道我可以停止它发生的方法吗?
我的一些用户进行的更模糊的搜索需要足够的处理资源来使任何重复都成为非常糟糕的想法。如果可能的话,我真的想避免这种情况 :-)