繁体   English   中英

Safari 5:Javascript sqlite“插入事务”似乎无法正确看到范围内的变量

[英]Safari 5: Javascript sqlite 'insert transaction' doesn't seem to see in-scope variables correctly

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

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

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

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

NB 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,SRAY ARRAY,count INTEGER请原谅愚蠢的语法问题-我不得不删除一些糠ff以使其可读-但是本质仍然在于控制台日志报告说var包含了我想要的但'tx .executeSql'说不。

注意:为了发现问题,已从插入的值中删除了所有约束-声明中甚至没有坚持使用主键(在全局级别更早出现)。 同样要澄清的是,'id'会适当增加,并在db中这样记录,但其他三个将插入不变的值-与日志报告相反(我已经意识到日志不会输出id,但是它确实清洁之前-老实说)。

非常感谢。

认为我已经掌握了它,并且眨眼间就知道了。 “通用”变量(例如“标题”)会在每次迭代过程中重新分配,但它们不是简单的整数(“ p”直到难题出现,但我认为这里还是引用与价值有关)才取到它们的最后一个值,因此,记录器始终是循环的最后一次迭代期间的值。 为了解决这个问题,我将这些值简单地重新记录到了一个新数组中,这样我就不必担心当前的数组长度等问题了,在它们上使用了'push(..)'和'pop(..)'该数组。 我希望现在说我可以继续下去还为时过早。 感谢您的浏览和抓挠。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM