3

我一直在单步执行一些 JavaScript 代码(在本例中是 Prototype 的 AJAX 库),以瞥见 responseText。我在 Firebug 和 IE Developer Tools 中读到过,您可以在断点处的任何本地范围内修改变量。

我看到我可以通过双击本地窗格中的变量或通过上下文菜单来做到这一点。我已经看到它有效,但不是一直有效,而且不是在我最需要它的时候:就在 responseText 出现时,我想对其进行编辑。

为了说明这一点:

调试 Ajax 响应

我想更改突出显示的属性的值。

但这些变化并没有反映出来。事实上,没有任何属性变化反映在整个传输对象中。

为什么我还要尝试这样做? 嗯,在那个 responseText 中有一段 JavaScript 片段,它由 Prototype 的 evalScripts() 方法执行,其中可能存在语法错误。这导致 Magento 在类别编辑表单上出现“白屏死机”。我在 JavaScript 中发现了我的语法错误,并在开发环境中修复了它。但我也想在我的暂存环境(我没有写访问权限)中仔细检查这个修复。所以我的想法是在一个暂存环境客户端页面请求上截取responseText,修改它来修复JS错误,让它通过来证明我的bug修复。

我可以等到这段代码被推送并在登台上测试,但我提出这个问题的真正目的是弄清楚为什么我可以修改一些本地范围变量而不是其他变量。

我希望我已经问清楚了。任何帮助,将不胜感激。谢谢!

更新(Chrome): 我认为值得一提的是,Chrome 支持此功能的时间已经很晚了,但最近(3 月 21 日)的开发正在进行中,根据这篇文章:

https://code.google.com/p/v8/issues/detail?id=212

不过,这个问题的海报解释了我不知道的调试引擎的一些底层组件。很有见地。不回答我的问题,但仍然与主题有关。

4

1 回答 1

0

responseText属性是只读的!您会发现无论是调试器还是任何 JS 语句或表达式都不能修改该属性。您需要先将其分配给另一个局部变量或属性,然后才能对其进行更改。我为你准备了一个演示。您会看到某些内置对象的某些属性的只读性质,其中XMLHttpRequest之一。这不是调试或检查环境的问题,而是语言环境本身的一个特性。

请注意,虽然内置浏览器对象可以是只读的,但将您自己的对象设置为只读会更加困难。该Object.freeze方法存在于 ES5 中,但并非所有浏览器都支持(并且在撰写本文时在 V8 中会带来性能损失)。

于 2013-04-27T18:11:36.590 回答