1

浏览器收到响应后,网页的 DOM 可能会发生什么变化?

我在包含一次性表单标记的隐藏输入元素的值中看到了这种行为。

当我在浏览器中“查看源代码”时,我看到了服务器写出的正确值。当我提交表单、查看 DOM 的当前状态或只是将元素更改为文本输入时,我看到了不同的字符串。因此,当需要回发到服务器时,输入保持的值与服务器最初发送的值不同。

禁用javascript后问题仍然存在。向元素添加只读属性也无济于事。

新信息:我又摆弄了一些,不管你信不信,在 Firefox 中关闭图像可以让这个问题消失。

为什么会发生这种情况?

4

4 回答 4

1

如果浏览器具有“保存表单数据”功能,则它可能会使用先前提交的值预先填充数据。

(我希望流行的浏览器足够聪明,不会填充隐藏字段,但这是我可以建议的来源之一......)

于 2008-12-05T02:28:49.050 回答
1

将readonly="readonly"和autocomplete="off"放在字段标签中 可能会有一些运气。

不确定浏览器自动完成是否会这样做,但它是合理的,也可以尝试在您的测试浏览器中禁用自动完成,看看是否会改变任何东西。

于 2008-12-05T06:43:44.573 回答
1

我对正在发生的事情的解释是不正确的。我想这是一件好事,因为我认为我所看到的不应该发生!无论如何,这是我现在理解的情况:

此处的表单令牌是一次性使用的,因此仅对单页加载有效。页面上的其他地方是一个没有 src 属性的 img 标签,这导致浏览器尝试从 / 加载图像。由于索引页面是一个 php 页面,因此令牌被循环了。

I believed the DOM changed, I think, because some implementations of 'view source' (I was testing in several browsers) seemed to cause a page reload, as well...

Thanks for all of the suggestions.

于 2009-02-28T17:39:32.360 回答
0

“当我提交表单时,查看 DOM 的当前状态”是什么意思?

如果您提交表单,它会向服务器发送请求吗?您是在谈论服务器发回的结果页面上的 DOM 状态吗?

在不涉及客户端脚本的情况下,您的 DOM 不可能在客户端发生更改。

另一方面,如果您提交到服务器并取回一个全新的 DOM,那么,服务器更改了它。

于 2008-12-05T06:26:27.867 回答