0
我在firefox扩展中与sqlite数据库进行通信。首先我使用了this同步码。然后我将其更改为this异步代码,但它以错误结尾
anchors[i] is undefined, Line 95
This更改没有帮助。异步数据库通信的问题
似乎有变量范围的问题。
谢谢大家帮忙
我在firefox扩展中与sqlite数据库进行通信。首先我使用了this同步码。然后我将其更改为this异步代码,但它以错误结尾
anchors[i] is undefined, Line 95
This更改没有帮助。异步数据库通信的问题
似乎有变量范围的问题。
谢谢大家帮忙
一个问题是:anchors
显然是由document.anchors
返回的节点集合。因此,它不是一个固定的列表,它会改变,如果文档更改。在您的数据库查询正在运行时,可能会发生锚从文档中被删除的情况。为了防止这样的问题,可以使采集的副本:
var anchors = Array.prototype.slice.apply(document.anchors);
这将使anchors
规则阵列不会意外更改。
另一个问题是您的所有闭包函数使用相同的变量i
(有关更多信息,请参阅https://developer.mozilla.org/en/JavaScript/Guide/Closures)。当handleResult
执行时i
将具有值anchors.length
,因为循环已完成。为了防止这种情况,您需要捕获例如i
的“当前”值。在这样的对象属性:
statement.executeAsync({
anchorIndex: i,
handleResult: function(aResultSet) {
...
anchors[this.anchorIndex]
...
}
锚是'变种锚= e.target.getElementsByTagName( “A”);'的代码的情况下是[这里](http://stackoverflow.com/questions/6256653/javascript-code-too-slow-in-firefox-extension-using-storage-service)该函数在DOMContentLoaded事件上调用。 – xralf 2011-06-08 08:54:01
同样的问题 - 'getElementsByTagName'返回一个可以动态改变的节点集合。 – 2011-06-08 09:02:57
[This](http://pastebin.ubuntu.com/621608/)更改没有帮助。 – xralf 2011-06-08 09:05:30