我在 Firefox 中遇到了一个错误,涉及在修改某些表单数据(通过 AJAX)后使用重新加载按钮时我的表单上的一些信息不同步。
在IE(7)中,刷新好像总是重新提交原来提交的数据。因此,如果我加载一个表单,然后通过 JS/AJAX 修改并刷新,我会看到我在第一次加载时看到的内容。
在 Firefox (4) 中,我倾向于(至少在这种情况下)看到较新的数据。然而,由于我忽略了更新某些表单元素,该表单似乎重新提交时包含部分不正确的数据,在这种情况下可能会带来严重的困惑。
我的问题是,Firefox 和 IE 处理转发的方式到底有什么区别?它记录在任何地方吗?哪种方式更标准?其他浏览器呢?
编辑:可能值得注意的是,Firefox 似乎也只重新呈现某些元素(在我的例子中,标签的类发生了变化,但输入的禁用状态没有变化)。 Firefox 在刷新和重新发布时是否有关于如何更新 DOM 的特殊规则?
我检查了 FF 中 (re)POST 的返回,并确认它有一些异常行为。在返回的来源中,我得到了这一点:
<label id="delSheetContainer"
title="Estimate Sheets with Schedule Activities in the past may not be deleted."
class="">
<input id="delSheet" name="delSheet"
type="checkbox"
tabindex="3"
value="false"
//Inserted note: this is where the disabled value would have been
onclick="this.value=(this.value && 1); bSave=true; setBtn(this.checked);"
/>Delete Sheet
</label>
但是在浏览器(和 Firebug)中,我看到一个仍然禁用的复选框。但是,标签已正确更新。任何人都可以详细说明这种行为吗? (感谢引用!)
编辑:正如鲍里斯所解释的,Firefox 在刷新过程中保持“表单状态”。我的问题实际上是由这个事实引起的;服务器正在返回正确的内容,但 Firefox 仍然保持表单状态。
最佳答案
根据描述很难确定您在这里看到的是哪种效果,但是当您重新加载(而不是强制重新加载)时,Firefox 会将修改后的表单输入的值保持在它们原来的任何值 在重新加载之前。
因此,如果您有一个包含此标记的页面:
<input name="x">
并且用户在文本框中输入“foo”然后重新加载,重新加载后的输入仍然包含字符串“foo”。
这也适用于其值通过 JavaScript 修改的隐藏输入,这很可能解释了您观察到的行为。
确实没有涵盖重新加载行为的标准。
关于ajax - firefox 与 ie 在处理多个(重复)帖子方面究竟有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5758671/