2013-10-14 20 views
0

我正在使用Phonegap/Cordova爲使用設備日曆的Android構建應用程序。我編寫了一個插件(「Calify」),它將事件添加到設備日曆中,工作正常。不過,我試圖將插件返回的設備日曆事件ID添加到Web-SQL數據庫中的記錄中,但這會給我以下錯誤(在Android模擬器中運行):將數據從異步請求添加到WebSQL數據庫時出錯

file:///android_asset/www/cordova-2.2.0.js: Line 1090 : processMessage failed: Message: S01 Calify507282772 s[{"id":191,"calid":615}] 
file:///android_asset/www/cordova-2.2.0.js: Line 1091 : processMessage failed: Error: Error: INVALID_STATE_ERR: DOM Exception 11 

這是我的代碼的樣子。

window.addEvent(function(insertions){ 
    data = JSON.parse(insertions); 
    console.log(insertions); 
    event_id = data[0]['calid']; 
    id = data[0]['id']; 

    tx.executeSql('UPDATE AFSPRAKEN SET eventID=? WHERE id=' + id, [event_id]); 
}, [calendarID, [{start: start.getTime(), end: end.getTime(), title: event_title}]]); 

「插入」的日誌給我想要的結果,以及日誌記錄「事項標識」和「ID」個別。這似乎與數據庫插入有關(也是異步的)。 請注意,此函數在數據庫事務中運行,因爲我正在此日曆事件函數外部運行其他一些查詢,所以這是需要的。註釋插入查詢會使代碼無誤地運行。

DOM異常11似乎意味着對象('我猜'插入'')不再可訪問,也許它與此有關。

+0

我後我設法通過向數組添加addEvent的參數來解決這個問題,我在數據庫事務成功時迭代該數組。在演示中,運行addEvent函數,該函數在完成時創建新的數據庫事務以更新相應的記錄。一個解釋原始行爲的明確答案仍然是受歡迎的,但我的猜測是,它是由嵌入在另一個異步請求(db事務)中的異步請求(addEvent函數)引起的,前一個請求的完成嘗試在後者。 – Tumtum

回答

0

我想我所犯的錯誤是很明顯的現在,所以大家發現通過谷歌(錯誤消息是不是真的在正確的方向指向),這裏就是爲什麼我的代碼給了錯誤,這個問題:

數據庫事務是異步的,以及Phonegap插件。 Phonegap函數在數據庫事務之外競爭,使得在該事務內部不能運行數據庫查詢。這可以通過幾種方式來解決:

  • 公開賽在PhoneGap的通信
  • 像我一樣的完整功能的新的數據庫事務,與PhoneGap的插件連接數據庫事務