我找不出這段代碼有什麼問題。我有一個indexedDB實例。 keyPath是自動生成的。我可以成功地將對象添加到數據庫並獲取數據庫中的所有對象,但是我無法在我創建的索引中成功搜索對象。IndexedDB - 搜索索引event.target.result始終爲空
見我的jsfiddle:http://jsfiddle.net/R5ngM/13/
我找不出這段代碼有什麼問題。我有一個indexedDB實例。 keyPath是自動生成的。我可以成功地將對象添加到數據庫並獲取數據庫中的所有對象,但是我無法在我創建的索引中成功搜索對象。IndexedDB - 搜索索引event.target.result始終爲空
見我的jsfiddle:http://jsfiddle.net/R5ngM/13/
還沒釘它完美但但問題似乎是,你打開光標放在你的對象存儲,而不是指數。使用默認的keyPath可以正常工作,但在嘗試使用輔助索引時不起作用。
我想什麼你希望做的應該是這樣的:
var request = null;
if (null === index || 'undefined' === typeof index) {
request = transaction.openCursor(keyRange);
} else {
request = index.openCursor(keyRange);
}
request.onsuccess = on_success;
UPDATE:我花了很多時間與指標光標發現上述問題後,找錯了地方。這是問題:你正在存儲的對象是一個數組而不是對象文字。
我一直在尋找到你存儲對象,並注意到了這一點:
var entry = '<li>'+row[0].fname+' '+row[0].lname+'</li>';
瞭解您的訪問row
數組的第一個元素?你正在存儲一個數組。您的keypath(和我)假定存儲了一個對象。我相信有可能在陣列上有一個索引,但無論如何你的keyPath
已關閉。
Here's a largely-similar chunk of working code。在調試的時候我把它弄糟了,但你會得到這個要點。 (這是一個很好的snippit,所以如果你不介意,我會用它作爲其他StackOverflow示例的基礎。)
將光標保持在索引上,如我在上面的答案中所述。然後改變這一行:
var entry = '<li>'+row[0].fname+' '+row[0].lname+'</li>';
而變化的:
var newUser = [{fname:$('#fname').val(),lname:$('#lname').val()}];
要這樣:
var newUser = {fname:$('#fname').val(),lname:$('#lname').val()};
我在索引上打開了一個遊標,試圖查看內容,但它是空的。 http://jsfiddle.net/R5ngM/17/我希望jsfiddle有行號。我想我只是有一個空索引... –
我的嘗試都沒有返回一個'IDBCursorWithValue'對象,但他們都返回'onsuccess'和沒有'onerror's的東西。我傾向於同樣的結論,但問題是爲什麼? – buley
我剛剛嘗試了FF的最新版本,以查看我的大型主機修補程序是否損壞,並且FF似乎無法識別我嘗試初始化indexedDB的任何嘗試,儘管我使用的是mozilla文檔中的示例。這是跛腳。 –
還必須指出的是,上面的問題,甚至可能會出現當您打開索引上的光標。如果您在索引上打開遊標,但仍然始終爲空,則應該再次檢查您創建索引的數據類型以及要創建索引遊標的數據類型。在我的情況下,我創建了字符串數據類型的索引,並用int打開索引上的遊標,這讓我瘋狂。
我更新了代碼以確認索引「lname」已成功創建:http://jsfiddle.net/R5ngM/16/ –
感謝您收錄了小提琴。我會看看 – buley
現在應該解決這個問題 – buley