浏览器返回&转发并形成自动完成混乱

时间:2018-04-05 14:54:43

标签: javascript ajax browser

在我们的webapp上,该页面包含一个带有一些字段的过滤器表单,一个SEARCH按钮,它调用jQuery AJAX,根据过滤器表单数据加载项目。从javascript我们将表单过滤器值推送到url以维护浏览器历史记录。

当我们按下BACK按钮时,页面“重新加载”,但是我们看到表单值没有刷新到当前值。检查页面源代码,我们看到html包含带有正确值属性的文本框元素(来自url值),但文本框仍然显示表单的最后一个值。有时。有时它有效。

我们在表单值中添加了autocomplete =“off”,这有点帮助,“有时”变为“通常”,显示的值通常与html源匹配。但不总是。我们认为浏览器缓存是坏人 - 当我们按下后退或前进按钮时,有时页面不会刷新,而是来自“某处”。

我们添加了一个Web配置缓存设置:

<caching>
 <outputCacheSettings>
   <outputCacheProfiles>
     <add name="CacheProfileNone" noStore="true" varyByParam="*" duration="0" />
   </outputCacheProfiles>
 </outputCacheSettings>
</caching> 

并将该属性添加到控制器操作

[OutputCache(CacheProfile = "CacheProfileNone")]
public ActionResult Index(QueryViewModel model)
{...}

但它没有帮助。 :(有时当我们按下后退按钮时显示错误的表单值,与html值不匹配。表单值不会被自定义的javascript函数操作。我们使用console.log输出添加onchange事件,并且看不到日志消息,所以我们认为表单元素显示值不依赖于我们的决定或代码,但(我们认为)它取决于浏览器的东西。

我们打开新建议下一步该做什么,让浏览器始终加载页面并显示当前在html源中定义的值。

欢迎任何建议!谢谢!

1 个答案:

答案 0 :(得分:1)

我猜测(因为你没有提供代码),但这并不像你想象的那样工作:

  

从javascript我们将表单过滤器值推送到url   维护浏览器历史记录。

您需要调查History API replaceState()方法。

参考此处:

https://developer.mozilla.org/en-US/docs/Web/API/History_API