为什么在浏览器中执行 js 脚本取决于调试模式下的断点?
Why execution of js script in browser depends on brakepoints in debug mode?
我用 JS 编写了一个脚本,并在 Ubuntu 上的 Mozilla Firefox 中对其进行了测试。
代码一开始不行,只好调试了
然后我发现脚本正在执行取决于我在调试模式下设置断点的位置。
因此,如果我按照 first screenshot 中所示设置断点,我会得到 coffebrake
var 的值等于 0(但它应该是 1)。
如果我进入 getVar
方法,如 screenshot with going down in getVar method 所示,我会按计划得到 coffebrake
等于 1。
如果我在正常模式下使用这个脚本,它会给出第一种情况的结果,当我没有在 getVar
方法中设置断点时。
问题是什么?我应该怎么做才能获得正确的结果?
您的代码存在问题,您正在使用 异步 HTTP 请求来获取数据,但您没有等待它完成才访问 responseText
.这是问题的概要:
- 您正在使用 open 方法初始化
XMLHttpRequest
并表明您想要一个带有第三个参数的异步请求:其余代码不会等待请求的结果尽快完成,而是 return。
- 您在未设置状态调用处理程序的情况下调用
send
方法。没有一个,您将无法知道数据何时准备就绪。参见docs。在调用 send
. 之前,您真的应该设置 onreadystatechange
处理程序
- 您正在访问 responseText,但不知道它是否已经设置(请求已完成)。如果未设置,则正如文档所报告的那样,其值为
null
。由于您将值强制为 Number
,它将被转换为 0,这就是您所看到的。
长话短说:确保在调用send
之前设置onreadystatechange
并等待数据到那里再查询responseText
.另外,检查错误:)
我用 JS 编写了一个脚本,并在 Ubuntu 上的 Mozilla Firefox 中对其进行了测试。 代码一开始不行,只好调试了
然后我发现脚本正在执行取决于我在调试模式下设置断点的位置。
因此,如果我按照 first screenshot 中所示设置断点,我会得到 coffebrake
var 的值等于 0(但它应该是 1)。
如果我进入 getVar
方法,如 screenshot with going down in getVar method 所示,我会按计划得到 coffebrake
等于 1。
如果我在正常模式下使用这个脚本,它会给出第一种情况的结果,当我没有在 getVar
方法中设置断点时。
问题是什么?我应该怎么做才能获得正确的结果?
您的代码存在问题,您正在使用 异步 HTTP 请求来获取数据,但您没有等待它完成才访问 responseText
.这是问题的概要:
- 您正在使用 open 方法初始化
XMLHttpRequest
并表明您想要一个带有第三个参数的异步请求:其余代码不会等待请求的结果尽快完成,而是 return。 - 您在未设置状态调用处理程序的情况下调用
send
方法。没有一个,您将无法知道数据何时准备就绪。参见docs。在调用send
. 之前,您真的应该设置 - 您正在访问 responseText,但不知道它是否已经设置(请求已完成)。如果未设置,则正如文档所报告的那样,其值为
null
。由于您将值强制为Number
,它将被转换为 0,这就是您所看到的。
onreadystatechange
处理程序
长话短说:确保在调用send
之前设置onreadystatechange
并等待数据到那里再查询responseText
.另外,检查错误:)