2010-12-15 22 views
0

在堅果殼我編程作爲一種愛好。我試圖在Safari 5中將數據插入SQLite數據庫。Safari 5:Javascript sqlite'插入交易'似乎沒有看到範圍內的變量正確

我並不擔心注入攻擊,因爲使用自制擴展名,這僅用於從我訪問的某些站點收集數據。

我的傳記每循環迭代一個循環,其中包含來自'DOM變化事件'的數據最多20次迭代的循環)不會看到正確傳遞給它的變量。調用'console.log(變量)'表明它們確實包含正確的數據 - 但INSERT不會爲每個記錄插入正確的(不同的)數據,除了第一個正確遞增的變量(通過我自己的增量機制與其他行爲異常相同的範圍)。

我已閱讀過有關'工作人員'的重要內容,但對他們一無所知。

N.B. 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'說不。

N.B.爲了找到問題,所有約束都從插入的值中刪除 - 即使在聲明中(即在全局級別較早發生的)中,主鍵也不會被執行。此外,爲了澄清,'ID'增量正確,並記錄在數據庫中,但其他三個插入一個不變的值 - 與日誌報告相反(我已經意識到日誌不輸出ID,但它在清潔之前 - 誠實地)。

非常感謝。

+1

您可能需要發佈您的代碼以幫助我們爲您提供幫助。 – thirtydot 2010-12-15 12:57:25

+0

歡迎來到StackOverflow。一對夫婦指針...如果你想堅持,請註冊一個帳戶。我合併了您的兩個未註冊賬戶(當您未註冊時,它很容易創建多個賬戶)。此外,您可以隨時編輯您的問題以添加其他信息。最後,在幾天內,您可以選擇您的答案作爲解決方案。似乎有點奇怪,但這就是我們如何處理這些部分的事情。 – Will 2010-12-16 14:05:49

回答

0

想想我已經知道了,並在閃爍的閃光。在每次迭代期間被重新分配的'共同'變量,但不是簡單整數('p'是直到一個謎題,但我認爲參考與價值在這裏起作用)是在他們的最後值和所以它始終是記錄器循環的最後一次迭代期間的值。爲了解決這個問題,我做了一個簡單的重新錄製這些值到一個新的數組,並且我不必擔心當前數組長度等問題,使用'push(..)'和'pop(..)'該數組。我希望說我可以繼續前進,現在還不算太早。感謝您的期待和任何刮傷。