0

简而言之,我将编程作为一种爱好。我正在尝试将数据插入 Safari 5 中的 SQLite 数据库。

我不担心注入攻击,因为使用自制扩展程序,这仅用于从我访问的某些站点收集数据。

我的交易在循环的每次迭代中插入一行,其中包含来自“DOM 更改事件”的数据,最多迭代 20 次左右)没有看到正确传递给它的变量。调用“console.log(variable)”表明它们确实包含正确的数据 - 但 INSERT 不会在每条记录中插入正确的(不同的)数据,除了第一个正确递增的 var(通过我自己的递增机制在与其他行为不端的变量相同的范围)。

我读过“工人”很重要,但对他们一无所知。

注意 Windows 7 专业版

感激地收到任何指示 - 谢谢。


enter code here: HandleDOM_Change = function()  {
for (p=0; p<snip.length; p++)   { 
    title = snip[p].getElementsByClassName('title')[0].firstChild.textContent;
    value = snip[p].getElementsByClassName('value')[0].firstChild.textContent;
    lang = snip[p].getElementsByClassName('lang')[0].textContent;
    if (hP[p] != lang)  {
        ++count;
        id = count;
        db.transaction(function (tx) {
             console.log("events:" +events+ " title:" +title+ " value/p+1/lang: " +value+ ", " +(p+1)+ ", " +lang);
             tx.executeSql('INSERT INTO foo (id, text, time, name) VALUES (?, ?, ?, ?)', [id, title, value, lang]);
        },myTransactionErrorCallback,myTransactionSuccessCallback);
    hP[p] = lang;
    }
}
++events;

}

//全局变量:事件 INTEGER、snip ARRAY、count INTEGER 请原谅愚蠢的语法问题 - 我必须删除一些箔条以使其可读 - 但本质仍然是控制台日志报告 vars 包含我想要的但 'tx .executeSql' 说不。

NB 在试图找到问题的过程中,所有约束都已从插入的值中删除 - 甚至在声明中都没有坚持主键(在全局级别较早发生)。还要澄清一下,“id”会正确递增并在数据库中记录,但其他三个插入时值不变 - 与日志报告相反(我意识到日志不输出 id,但确实如此在清洁之前 - 老实说)。

非常感谢。

4

1 回答 1

0

想我已经明白了,而且一闪而过。在每次迭代期间重新分配的“常见”变量,例如“标题”,但不是简单的整数(“p”直到一个难题,但我认为参考与价值在这里发挥作用)取其最后一个值,并且所以它总是在循环的最后一次迭代中的值是记录器。为了解决这个问题,我将这些值简单地重新记录到一个新数组中,这样我就不必担心当前数组长度等,使用了“push(..)”和“pop(..)”那个数组。我希望现在说我可以继续前进还为时过早。感谢您的浏览和任何刮擦。

于 2010-12-16T11:59:09.810 回答