Javascript 如何获取indexedDb请求回调范围之外的结果
我有一个带有输入框的表单,我想用IndexedDb objectStore中的值自动完成该表单,这适用于两个过度定位的输入框。我可以很好地处理一个简单数组,但我想让它处理objectStore中的值。 为此,我必须将可用的值从事务中取出,以便在自动完成函数中循环使用它们 1-如何将事务的结果放入代码其余部分中可用的对象中 2-我的循环语法“results.value.name.length”(名称是我的objectStore索引)是否可以处理结果对象 通过光标获取IndexedDb对象:Javascript 如何获取indexedDb请求回调范围之外的结果,javascript,html,indexeddb,Javascript,Html,Indexeddb,我有一个带有输入框的表单,我想用IndexedDb objectStore中的值自动完成该表单,这适用于两个过度定位的输入框。我可以很好地处理一个简单数组,但我想让它处理objectStore中的值。 为此,我必须将可用的值从事务中取出,以便在自动完成函数中循环使用它们 1-如何将事务的结果放入代码其余部分中可用的对象中 2-我的循环语法“results.value.name.length”(名称是我的objectStore索引)是否可以处理结果对象 通过光标获取IndexedDb对象: var
var results = [];
var openDbRequest = indexedDB.open(DB_NAME);
openDbRequest.onsuccess = function (e) {
var db = e.target.result;
var tran2 = db.transaction("store");
tran2.objectStore("store").openCursor().onsuccess = function(e) {
var cursor = e.target.result;
if (cursor) {
results = cursor;
cursor.continue();
};
};
};
自动完成函数
var auto = "";
var auto_disp = "";
function getName(results) {
var input = document.forms['myform'].name.value;
var len = input.length;
if (input.length) {
for (i=0; i<results.value.name.length; i++){
if (results.value.name[i].substr(0,len).toLowerCase() == input.toLowerCase()){
auto_disp = input + results.value.name[i].substr(len);
auto = results.value.name[i];
break;
}
}
}
document.forms['myform'].auto_name.value = auto_disp;
}
function setName() {
document.forms['myform'].name.value = auto;
hideAuto();
}
function hideAuto() {
document.forms['myform'].auto_name.value = "";
}
var auto=”“;
var auto_disp=“”;
函数getName(结果){
var输入=document.forms['myform'].name.value;
var len=input.length;
if(输入长度){
对于(i=0;i如果要在事务范围之外使用它,只需将其添加到变量中即可
var results = [];
var openDbRequest = indexedDB.open(DB_NAME);
openDbRequest.onsuccess = function (e) {
var db = e.target.result;
var tran2 = db.transaction("store");
tran2.objectStore("store").openCursor().onsuccess = function(e) {
var cursor = e.target.result;
if (cursor) {
results.push(cursor.value)
cursor.continue();
};
};
};
在此之后,您可以迭代results对象,一旦检索到所有数据,事务范围将关闭。好的,我想是的。我如何测量对象的数量,“results.length”?我没有让循环工作。results.length应该提供集合中的元素数量,请记住,您只能开始一旦检索到indexeddb的数据,就迭代te集合。我想这是你的问题。是的……我得到了“TypeError:results is undefined”,任何关于如何超越它的想法,我都会调用getName()函数,这样事务就不应该在它里面,如果我将它嵌套在事务的oncomplete()中,它将被称为undefined。我试图禁用输入框,并执行如下操作:tran2.oncomplete=function(e){document.forms['myForm'].name.disabled=false;getName(results);};我想我回到了原点,光标或结果总是在事务或oncomplete()内部可用,但在外部不可用
openDbRequest.onsuccess = function (e) {
var db = e.target.result;
var tran2 = db.transaction("store");
tran2.objectStore("store").openCursor().onsuccess = function(e) {
var cursor = e.target.result;
if (cursor) {
var input = document.forms['myform'].country.value; //the inputted value
var len = input.length;
if (input.length) {
for (i=0; i<cursor.length; i++){
if (cursor.value.nome[i].substr(0,len).toLowerCase() == input.toLowerCase()){
auto_disp = input + cursor.value.nome[i].substr(len);
auto = cursor.value.nome[i];
break;
}
}
}
document.forms['myform'].auto_name.value = auto_disp;
cursor.continue();
}
};
};
var results = [];
var openDbRequest = indexedDB.open(DB_NAME);
openDbRequest.onsuccess = function (e) {
var db = e.target.result;
var tran2 = db.transaction("store");
tran2.objectStore("store").openCursor().onsuccess = function(e) {
var cursor = e.target.result;
if (cursor) {
results.push(cursor.value)
cursor.continue();
};
};
};