Safari 5: Javascript sqlite «вставка транзакции», похоже, неправильно видит переменные в области видимости - PullRequest
0 голосов
/ 15 декабря 2010

в скорлупе ореха я программирую как хобби.Я пытаюсь вставить данные в базу данных SQLite в Safari 5.

Я не беспокоюсь об атаках с использованием инъекций, потому что при использовании внутреннего запеченного расширения я использую его только для сбора данных с некоторых сайтов, которые я посещаю.

Моя транзакция вставляет строку на итерацию цикла, которая содержит данные из «события изменения DOM» (до 20 или около того итераций), не видит переменные, переданные ей правильно.Вызов 'console.log (variable)' показывает, что они содержат правильные данные - но INSERT не вставляют правильные (разные) данные в запись, за исключением первого var, который корректно увеличивается (через мой собственный механизм приращения, который находится вта же сфера действия, что и у других неверных поведений).

Я читал о важности «рабочих», но ничего о них не знаю.

NB Windows 7 Pro

Любые указатели с благодарностьюполучено - спасибо.


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, отсечение ARRAY, подсчет INTEGER Пожалуйста, извините за глупые проблемы с синтаксисом - мне пришлось удалить кое-чтоон доступен для чтения - однако суть остается в том, что в журналах консоли сообщается, что переменные содержат то, что я хочу, но «tx.executeSql» говорит «нет».

NB. При попытке найти проблему все ограничения были удалены извставленные значения - даже в первичном ключе не указывается в объявлении (что происходит раньше на глобальном уровне).Также, чтобы уточнить, 'id' увеличивается должным образом и записывается как таковой в БД, но остальные три вставляются с неизменным значением - в отличие от отчета журнала (я понял, что журнал не выводит идентификатор, но он сделалдо чистки - честно).

Большое спасибо.

1 Ответ

0 голосов
/ 16 декабря 2010

Думаю, у меня это получилось и в мгновение ока.«Общие» переменные, такие как «заголовок», которые перераспределяются во время каждой итерации, но не являются простыми целыми числами («р» - это загадка, но я думаю, что здесь в игру вступают ссылки на значение), они берутся в их последнем значении итаким образом, это всегда значение во время последней итерации цикла, которое записывает.Чтобы решить эту проблему, я сделал простую перезапись этих значений в новый массив и, чтобы мне не пришлось беспокоиться о текущей длине массива и т. Д., Использовал push (..) и pop (..) вэтот массив.Надеюсь, еще не рано говорить, что я могу двигаться дальше.Спасибо за внимание и царапин.

...