Javascript 未捕获类型错误:使用indexedDB时,Chrome中的类型错误

Javascript 未捕获类型错误:使用indexedDB时,Chrome中的类型错误,javascript,indexeddb,Javascript,Indexeddb,我正在尝试设置indexeddb存储以便在chrome中使用。但是当我尝试设置读写事务时,我得到了一个未捕获的类型错误 我还没有找到关于使用webkitIDB的好的、最新的信息。所以我基本上是在瞎飞。知道我做错了什么吗?有没有我错过的好老师 设置: function OfflineStorage() { this.saveJSONString = __bind(this.saveJSONString, this); var request, _this = this; thi

我正在尝试设置indexeddb存储以便在chrome中使用。但是当我尝试设置读写事务时,我得到了一个未捕获的类型错误

我还没有找到关于使用webkitIDB的好的、最新的信息。所以我基本上是在瞎飞。知道我做错了什么吗?有没有我错过的好老师

设置:

function OfflineStorage() {
  this.saveJSONString = __bind(this.saveJSONString, this);
  var request,
    _this = this;
  this.dbkeyRange = window.webkitIDBKeyRange;
  this.dbTransaction = window.webkitIDBTransaction;
  this.db = window.webkitIndexedDB;
  request = this.db.open("lucidFrog");
  request.onsuccess = function(e) {
    _this.db = e.target.result;
    return _this.setupDB(); //setupDB() ensures the objectStores have been created.
  };
}    
保存功能:

OfflineStorage.prototype.saveJSONString = function(objectStore, json_string, obj_id) {
  var request, store, transaction;

  //PROBLEM AREA, gives "Uncaught TypeError: Type error"
  transaction = this.db.transaction([objectStore], this.dbTransaction.READ_WRITE, 0);
  ////////////////////

  store = transaction.objectStore(objectStore);
  request = store.put({
    "json": json_string,
    "id": obj_id
  });
  request.onsuccess = function(e) {
    return console.log("YYYYYYEEEEEAAAAAHHHHHH!!!");
  };
};

已创建请求的objectStore,并确认已定义此.dbTransaction。

这不是从对象存储抛出的IndexedDB错误,而是安装中的某个错误。当您将错误的对象类型传递给调用时会引发这种错误,这就是为什么我第一次猜测objectStore变量实际上不是字符串

基于消除,this.db不是未定义的,否则它将在事务上出错,事务是一个函数,否则它将引发非函数调用。所以我不得不猜测this.dbTransaction.READ_WRITE应该返回1,很好,再检查一下

因此,我强烈怀疑这是导致问题的第三个参数。我相当确定我从未使用过spec optional中显示的第三个参数,并且认为它在这里是不必要的,因为默认超时已经是0。你能试着把那行改成下面的,看看它是否行得通吗

transaction=this.db.transaction[objectStore],this.dbTransaction.READ\u WRITE


更新:请注意,版本常量现在已弃用。您现在需要传递的不是这些数值,而是一个字符串:readwrite、readonly或versionchange。

这不是从对象存储抛出的IndexedDB错误,而是设置中的某个错误。当您将错误的对象类型传递给调用时会引发这种错误,这就是为什么我第一次猜测objectStore变量实际上不是字符串

基于消除,this.db不是未定义的,否则它将在事务上出错,事务是一个函数,否则它将引发非函数调用。所以我不得不猜测this.dbTransaction.READ_WRITE应该返回1,很好,再检查一下

因此,我强烈怀疑这是导致问题的第三个参数。我相当确定我从未使用过spec optional中显示的第三个参数,并且认为它在这里是不必要的,因为默认超时已经是0。你能试着把那行改成下面的,看看它是否行得通吗

transaction=this.db.transaction[objectStore],this.dbTransaction.READ\u WRITE


更新:请注意,版本常量现在已弃用。您现在需要传递的不是这些数值,而是一个字符串:readwrite、readonly或versionchange。

我喜欢将自己视为IndexedDB专家,我很乐意提供帮助。首先,您要传递的是objectStore变量是字符串还是对实际对象存储的引用,如objectStore创建时返回的引用?objectStore是作为字符串传递的。我喜欢将自己视为IndexedDB专家,我很乐意提供帮助。首先,您要传递的是objectStore变量是字符串还是对实际对象存储的引用,如objectStore创建时返回的引用?objectStore是作为字符串传递的。