IDBObjectStore.add() - Web API 接口参考 编辑
IDBObjectStore
接口中的 add()
方法返回一个 IDBRequest
对象,在单独的线程中创建一个结构(structured clone)化克隆值,并且在对象存储中存储这个克隆值。这个方法用作在一个对象存储中添加一条新的记录。
要确定添加操作是否成功完成,可以监听事务的 complete
事件。除了 IDBObjectStore.add
请求 success
事件之外,因为事务在成功被触发后仍然可能失败。换句话说,成功事件只有在事务成功排队后才会触发。
add()
方法是唯一的插入方法。如果以关键字参数作为主键的一条记录已经存在在存储对象中,这时在返回的请求对象中 ConstrainError
错误事件将被触发。对于更新存在的记录,你应该使用 IDBObjectStore.put
方法替代它。
语法
var request = objectStore.add(value); var request = objectStore.add(value, key);
参数
- value
- 需要存储的值。
- key 可选
- 关键字用于识别记录。如果未指明,即为空。
返回
一个 IDBRequest
对象,在该操作对象中触发与此相关的后续事件。
异常
这个方法可能导致以下类型中的一个 DOMException
:
Exception | Description |
---|---|
ReadOnlyError | 与此操作相关联的事务处于只读模式。 |
TransactionInactiveError | 当前 IDBObjectStore 事务不可用。 |
DataError | 适用于以下任何条件:
|
InvalidStateError |
|
DataCloneError | 通过内部结构的克隆算法,被存储的数据无法被克隆 |
ConstraintError | 因为主键违法规定导致的插入操作失败(由于已存在的记录使用了相同的主键值)。 |
示例
在以下的代码片段中,在我们数据库中打开一个 read/write(读写)事务和使用 add()
方法添加一些数据到存储对象中。还要注意附加到事务事件处理程序的函数,这些函数用于报告事务打开成功或失败时的结果。完整的示例代码,请查看我们的 To-do Notifications 应用( 在线查看示例 )。
// Let us open our database
var DBOpenRequest = window.indexedDB.open("toDoList", 4);
DBOpenRequest.onsuccess = function(event) {
note.innerHTML += '<li>Database initialised.</li>';
// store the result of opening the database in the db variable.
// This is used a lot below
db = DBOpenRequest.result;
// Run the addData() function to add the data to the database
addData();
};
function addData() {
// Create a new object ready to insert into the IDB
var newItem = [ { taskTitle: "Walk dog", hours: 19, minutes: 30, day: 24, month: "December", year: 2013, notified: "no" } ];
// open a read/write db transaction, ready for adding the data
var transaction = db.transaction(["toDoList"], "readwrite");
// report on the success of the transaction completing, when everything is done
transaction.oncomplete = function(event) {
note.innerHTML += '<li>Transaction completed.</li>';
};
transaction.onerror = function(event) {
note.innerHTML += '<li>Transaction not opened due to error. Duplicate items not allowed.</li>';
};
// create an object store on the transaction
var objectStore = transaction.objectStore("toDoList");
// Make a request to add our newItem object to the object store
var objectStoreRequest = objectStore.add(newItem[0]);
objectStoreRequest.onsuccess = function(event) {
// report the success of our request
note.innerHTML += '<li>Request successful.</li>';
};
};
Specification
Specification | Status | Comment |
---|---|---|
Indexed Database API 2.0 add() | Recommendation | |
Indexed Database API Draft add() | Recommendation |
Browser compatibility
BCD tables only load in the browser
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.See also
- Using IndexedDB
- Starting transactions:
IDBDatabase
- Using transactions:
IDBTransaction
- Setting a range of keys:
IDBKeyRange
- Retrieving and making changes to your data:
IDBObjectStore
- Using cursors:
IDBCursor
- Reference example: To-do Notifications (view example live.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论