javascript - 为什么 Firefox + 我的代码会破坏 FireFox 刷新

标签 javascript ajax firefox post

我现在很生气。我损失了几个小时,我不知道为什么会发生这种情况。这是半咆哮,但我会尽量保持简短

  1. 我的代码无法工作,即使刷新后它也被破坏了
  2. 我修复了我的代码,或者我想是因为如果我不改变任何东西它就会停止工作(你会认为我在想象这个......)
  3. 我以某种方式决定创建一个新窗口或选项卡,运行我的代码并验证它是否有效。
  4. 我编写了更多代码,发现一切又都被破坏了
  5. 我在新窗口中编写测试,并看到我的代码确实有效
  6. 我发现我的代码不起作用,并且 firebug 没有帮助
  7. 我注意到当我创建一个新标签时一切正常
  8. 我意识到刷新不起作用,我必须创建一个新选项卡才能使我的代码正常工作。

然后我立刻就知道问题是什么了。我修改了显示:无文本框,但我设置的值不正确。我看不到它,因为它被隐藏了。现在,你们中的一些人可能会说这是我的错,因为刷新时所有数据可能都会被缓存。但这是最关键的。我正在使用 POST 数据。我在每次刷新之间发布。

当相同的数据被缓存并仍然使用时,使用 POST 有什么意义?如果搜索引擎没有机会跟踪阻止用户获取链接,那么当安全或重复操作不是问题时,我为什么要费心发布任何内容呢? POST 似乎没有做任何事情。

最佳答案

听起来您似乎受到了表单字段值内存的打击。

当您使用后退和前进时(但在具有 bfcache 的浏览器中未使用 bfcache 时),或者在某些浏览器中,当您点击重新加载时,浏览器会尝试保留在页面上次卸载。此功能旨在允许用户导航和刷新表单,而不会丢失他们费力输入的所有数据。

因此,您不能依赖表单字段的值在页面加载时与它看起来应该来自 HTML 源的值相同。如果您的 DOM 状态取决于表单字段的值(例如,某些字段根据另一个字段的值隐藏或禁用的表单),则必须在页面加载时更新该状态以反射(reflect)浏览器已静默放置到位的字段值(不会发生 onchange 事件)。并且根本不要使用隐藏输入来存储脚本变量

确切的行为因浏览器而异。例如,有些浏览器保留隐藏字段的值,有些则不保留。 Mozilla 和 WebKit 在字段被解析到 DOM 时立即将新值放入其中,而 IE 仅在 window.onload 上执行此操作...而 Opera 则在 window.onload 之后执行此操作.onload,因此只能通过在onload之后设置0超时来更新状态来捕获它。这是一团糟。

关于javascript - 为什么 Firefox + 我的代码会破坏 FireFox 刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2943290/

相关文章:

ajax - 浏览器发送 AJAX 请求 3 次

javascript - Coffeescript/Javascript 循环未执行

jquery - 如何在 Sharepoint 2010 中使用 HTTP 处理程序发出 jQuery AJAX 请求?

python - Milonic 菜单 : Element is not clickable at point. 其他元素将收到点击

javascript - 强制 AJAX 请求与服务器重新验证缓存,而不完全重新加载

javascript - 提交时清除 Ajax 表单字段

javascript - Firefox 的 textarea 有默认的最大长度吗?

javascript - 仅允许单词和空格的正则表达式

javascript - 如何在c3.js中的图表行中创建圆到圆的外层?

javascript - 如何检测新行