2010-12-15 3 views
0

in einer Nussschale Ich programmiere als Hobby. Ich versuche, Daten in eine SQLite-Datenbank in Safari 5 EINFÜGEN.Safari 5: Javascript sqlite 'einfügen Transaktion' scheint nicht in-scope-Variablen korrekt zu sehen

Ich mache mir keine Sorgen über Injektionsangriffe, da mit einer selbstgebackenen Erweiterung, dies ist nur für meine Verwendung von Daten von einigen Websites, die ich besuche.

Meine Tranaktion fügt eine Zeile pro Iteration einer Schleife ein, die Daten aus einem 'DOM Change Event' für bis zu 20 oder mehr Iterationen enthält. Die Variablen werden nicht korrekt an sie übergeben. Das Aufrufen von 'console.log (variable)' zeigt an, dass sie die korrekten Daten enthalten - aber INSERTs fügen nicht die korrekten (unterschiedlichen) Daten pro Datensatz ein, außer der ersten var, die korrekt inkrementiert (über meinen eigenen Inkrementmechanismus, der in ist) derselbe Umfang wie die anderen sich schlecht benehmenden vars).

Ich habe gelesen, dass "Arbeiter" wichtig sind, aber nichts über sie wissen.

N.B. Windows 7 Pro

Alle Zeiger dankbar erhalten - danke.


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; 

}

// Globale Variablen: Ereignisse INTEGER, ARRAY schnippeln, zählen INTEGER Bitte dumme Syntax Probleme entschuldigen - ich hatte einige Spreu entfernen sie lesbar zu machen - aber die Essenz bleibt Die Konsolenprotokolle melden, dass die Variablen enthalten, was ich will, aber 'tx.executeSql' sagt nein.

N.B. Bei dem Versuch, das Problem zu finden, wurden alle Bedingungen aus den eingefügten Werten entfernt - nicht einmal ein Primärschlüssel wird in der Deklaration verlangt (was früher auf der globalen Ebene geschieht). Um es klarzustellen, "id" wird richtig inkrementiert und als solches in der db aufgezeichnet, aber die anderen drei werden mit einem unveränderlichen Wert eingefügt - im Gegensatz zum Protokollbericht (ich habe festgestellt, dass das Protokoll die ID nicht ausgibt, aber es tat vor der Reinigung - ehrlich).

Vielen Dank.

+1

Sie müssen Ihren Code möglicherweise posten, um uns zu helfen. – thirtydot

+0

Willkommen bei StackOverflow. Ein paar Hinweise ... Wenn du bleiben willst, melde dich bitte an. Ich habe Ihre zwei nicht registrierten Konten zusammengeführt (es ist einfach, mehrere Konten versehentlich zu erstellen, wenn Sie nicht registriert sind). Außerdem können Sie Ihre Frage jederzeit bearbeiten, um zusätzliche Informationen hinzuzufügen. Schließlich können Sie in ein paar Tagen Ihre Antwort als Lösung auswählen. Scheint etwas merkwürdig, aber so machen wir Dinge um diese Teile herum. – Will

Antwort

0

Denken Sie, ich habe es und in einem blendenden Blitz. Die 'allgemeinen' Variablen wie 'Titel', die während jeder Iteration neu zugewiesen werden, aber keine einfachen ganzen Zahlen sind ('p' ist bis zu einem Rätsel, aber ich denke, dass Referenz gegen Wert hier ins Spiel kommt), werden auf ihren letzten Wert genommen Es ist also immer der Wert während der letzten Iteration der Schleife, der Rekorder ist. Um dies zu lösen, habe ich eine einfache Neuaufnahme dieser Werte in ein neues Array vorgenommen, so dass ich mir keine Sorgen über die aktuelle Array-Länge usw. machen musste und "push (..)" und "pop (..)" anwendete dieses Array. Ich hoffe, es ist nicht zu früh zu sagen, dass ich weitermachen kann. Danke fürs schauen und kratzen.

Verwandte Themen