我已經花了一整天,但我就是不明白什麼在我的PhoneGap aplication發生。
在使用PhoneGap的從本地存儲我的應用程序即時通訊,存儲從網頁檢索到的新聞消息。我這樣做是因爲我希望用戶能夠脫機觀看內容。
當他們上線的應用程序將簡單地發送其最後一次更新日期的網站,該網站將只發送更改的記錄背部和應用程序並將其存儲在本地數據庫一次。
這一切都加載數據的時候第一次作品不錯,exept。
問題
當我開始了第一次的應用程序,它需要與網站上提供的所有記錄填充數據庫。 (201行)但是,當我嘗試加載多於39條消息時,它將創建一個未定義的sql錯誤。
不過,我可以改變PHP腳本,因此將只派39分的結果。第一次加載應用程序後,我可以再次更改腳本,以便它將發送所有記錄,並且它將完美無瑕。
爲了使問題更加複雜,我的應用程序的每一次啓動所有表都刪除和重建(當然這僅僅是爲發展宗旨,和下降將不會包含在最終版本)。重新啓動應用後,它將加載201條記錄,沒有任何問題。
再次重現的問題,我必須完全卸載該應用程序,然後重新安裝。
代碼
代碼存儲結果:在啓動時
var q = 'INSERT OR REPLACE INTO NIEUWS (id, title, introtext, catid) VALUES (?, ?, ?, ?)';
var len = contents.length;
for (var i=0; i<len; i++){
tx.executeSql(q, [contents[i].id, contents[i].title, contents[i].introtext, contents[i].catid]);
}
代碼:
tx.executeSql('DROP TABLE IF EXISTS NIEUWS');
tx.executeSql('CREATE TABLE IF NOT EXISTS NIEUWS (id PRIMARY KEY, title TEXT, introtext TEXT, catid INTEGER)');
我真的希望這個問題是有道理的一些你,因爲我現在完全失去了。
在此先感謝!
編輯1 只試圖只保存ID和標題,這工作沒有任何問題。
var q = 'INSERT OR REPLACE INTO NIEUWS (id, title) VALUES (?, ?)';
var len = contents.length;
for (var i=0; i<len; i++){
tx.executeSql(q, [contents[i].id, contents[i].title]);
}
編輯2 改寫代碼,以等待回調,同樣的錯誤仍然存在。
function HandleNewsQuery(tx){
var q = 'INSERT OR REPLACE INTO NIEUWS (id, title, introtext, catid) VALUES (?, ?, ?, ?)';
if(c < contents.length){
tx.executeSql(q, [contents[c].id, contents[c].title, contents[c].introtext, contents[c].catid], HandleNewsQuery, errorCB);
c++;
}
}
可能相關:http://stackoverflow.com/questions/4825455/web-sql-database-javascript-loop – pawel 2013-04-09 14:09:15