Html IndexedDB-搜索索引event.target.result始终为空

Html IndexedDB-搜索索引event.target.result始终为空,html,indexeddb,Html,Indexeddb,我想不出这段代码有什么问题。我有一个indexedDB实例。关键路径是自动生成的。我可以成功地将对象添加到数据库并获取数据库中的所有对象,但我无法在我创建的索引中成功搜索对象 请参阅我的JSFIDLE:还没有完全确定,但问题似乎是您正在打开对象存储上的光标,而不是索引。使用默认的keyPath可以很好地工作,但当您尝试使用辅助索引时,它将不起作用 我认为你要做的应该是: var request = null; if ( null === index || 'undefined'

我想不出这段代码有什么问题。我有一个indexedDB实例。关键路径是自动生成的。我可以成功地将对象添加到数据库并获取数据库中的所有对象,但我无法在我创建的索引中成功搜索对象


请参阅我的JSFIDLE:

还没有完全确定,但问题似乎是您正在打开对象存储上的光标,而不是索引。使用默认的keyPath可以很好地工作,但当您尝试使用辅助索引时,它将不起作用

我认为你要做的应该是:

    var request = null;
    if ( null === index || 'undefined' === typeof index ) {
        request = transaction.openCursor( keyRange );
    } else {
        request = index.openCursor( keyRange );
    }
    request.onsuccess = on_success;
更新:在用索引光标找到上述问题后,我花了很多时间在错误的地方查找。问题是:您存储的对象是数组而不是对象文本

我在查看您存储的对象时注意到:

        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()};

还必须注意,当您在索引上打开光标时,甚至可能出现上述问题。如果在索引上打开游标,但始终为空,则应仔细检查创建索引的数据类型和创建索引游标的数据类型。在我的例子中,我创建了字符串数据类型的索引,并在索引上用int打开了一个光标,这让我抓狂。

我更新了代码以确认索引“lname”已成功创建:感谢您提供了一个fiddle。我会看一看我在索引上打开了一个光标试图查看内容,但它是空的。我希望jsfiddle有行号。我想我只是有一个空索引…我的所有尝试都没有返回
IDBCursorWithValue
对象,但是它们都在
onsuccess
中返回了一些内容,并且没有
onerror
s。我倾向于相同的结论,但问题是为什么?我只是尝试了最新版本的FF,看看我的broswer修复是否不好,FF似乎没有意识到我试图初始化indexedDB,即使我使用的是mozilla文档中的示例。这太差劲了。您的代码在FF中无法工作,因为它是IDB API的2011年12月版本,而不是最新版本。区别在于,对于DB安装,前者使用
setVersion
请求(您拥有的),后者使用
onupgradeneeded
回调。如果有问题,请查看我的WIP库。库:示例应用程序框架:请注意,在事件对象中,它表示
returnValue:true
var newUser = {fname:$('#fname').val(),lname:$('#lname').val()};