aboutsummaryrefslogtreecommitdiff
path: root/files/es/web/api/idbobjectstore/add/index.html
blob: 1a28ff194c086dc1c196cedc370f36c214cb03dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
---
title: IDBObjectStore.add
slug: Web/API/IDBObjectStore/add
tags:
  - API
  - Add
  - Almacenamiento
  - Base de datos
  - IDBObjectStore
  - IndexedDB
  - Referencia
translation_of: Web/API/IDBObjectStore/add
---
<p>{{ APIRef("IDBObjectStore") }}</p>
<div>
 <p>El metodo <code>add()</code> de la interfaz {{domxref("IDBObjectStore")}} retorna un objeto {{domxref("IDBRequest")}}, y, un hilo separado, crea un <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-interfaces.html#structured-clone">clone estructurado</a> del valor, y almacena el valor clonado en el almacén de objetos. Esto es para agregar nevos registros a un almacén de objetos.</p>
 <p>Para determinar si la operación de agregar fue completada satisfactoriamente, escucha el evento <code>complete</code> de la transaccion en adicion al evento <code>success</code> de la peticion <code>IDBojectStore.add</code>, porque la transaccion y todavía puede fallar después de lanzar el evento success. En otras palabras, el eventos success sólo es lanzado cuando la transacción ha sido puesta en cola satisfactoriamente.</p>
 <p>El método agregar es un método de <em>sólo inserción</em>. Si un registro ya existe en el almacén de objetos con el argumento <code>key</code> como su clave, entonces un error <code>ConstrainError</code> es lanzado en el objeto petición devuelto. Para actualizar registros existentes, debes usar el método {{domxref("IDBObjectStore.put")}} en su lugar.</p>
</div>
<h2 id="Sintaxis">Sintaxis</h2>
<pre class="brush: js">var request = objectStore.add(myItem, optionalKey);</pre>
<h3 id="Retorno">Retorno</h3>
<p>Un objeto <span style="line-height: 1.5;">{{domxref("IDBRequest")}} en el que los eventos subsecuentes relacionados a esta operación son lanzados.</span></p>
<h3 id="Excepciones">Excepciones</h3>
<p>Este método puede generar un <span style="line-height: 1.5;">{{domxref("DOMException")}}</span> con un <span style="line-height: 1.5;">{{domxref("DOMError")}}</span> de uno de los siguiente tipos:</p>
<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">Excepción</th>
   <th scope="col">Descripción</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td><code>ReadOnlyError</code></td>
   <td>La transacción asociada con esta operación está en un <a href="/en-US/docs/IndexedDB/IDBTransaction#mode_constants" title="/en-US/docs/IndexedDB/IDBTransaction#mode_constants">modo</a> de sólo lectura.</td>
  </tr>
  <tr>
   <td><code>TransactionInactiveError</code></td>
   <td>Esta transacción de {{domxref("IDBObjectStore")}}'s está inactiva.</td>
  </tr>
  <tr>
   <td><code><span style="line-height: normal;">DataError</span></code></td>
   <td>
    <p>Cualquiera de los siguientes condiciones aplica:</p>
    <ul>
     <li>El almacén de objetos usa llaves en línea o tiene un generador de llaves, y una argumento llave fue proporcionado.</li>
     <li>El almacén de objetos usa llaves fuera de línea y no tiene un generador de llaves, y un argumento llave fue proporcionado.</li>
     <li>El almacén de objetos usa llaves en línea pero no un generador de llaves, y la ruta de la llave del almacén de objetos no da una llave válida.</li>
     <li>El argumento llave fue proporcionado pero no contiene una llave válida.</li>
    </ul>
   </td>
  </tr>
  <tr>
   <td><code>InvalidStateError</code></td>
   <td>El {{domxref("IDBObjectStore")}} ha sido borrado o removido.</td>
  </tr>
  <tr>
   <td><code>DataCloneError</code></td>
   <td>Los datos siendo almacenados no pueden ser clonados por el algoritmo de clonado estructurado interno.</td>
  </tr>
 </tbody>
</table>
<h2 id="Ejemplo">Ejemplo</h2>
<p>En el siguiente código, abrimos una transacción read/write en nuestra base de datos y agregado algunos datos al almacén de datos usando <code>add()</code>. También ten en cuenta que las funciones adjuntas a los manejadores de eventos de la transacción para informar en la salida de la apertura de transacciones en el evento de éxito o falla. Para un ejemplo completo funcionando, mira nuestra aplicación <a href="https://github.com/mdn/to-do-notifications/" style="line-height: 1.5;">To-do Notifications</a><span style="line-height: 1.5;"> (</span><a href="http://mdn.github.io/to-do-notifications/" style="line-height: 1.5;">ver ejemplo</a><span style="line-height: 1.5;">)</span>.</p>
<pre class="brush: js" style="font-size: 14px;">// Abrimos nuestra base de datos
<span style="line-height: 1.5;">var DBOpenRequest = window.indexedDB.open("toDoList", 4);

</span><span style="line-height: 1.5;">DBOpenRequest.onsuccess = function(event) {</span>
  note.innerHTML += '&lt;li&gt;Database initialised.&lt;/li&gt;';

  // Almacenar el resultado de la apertura de la base de datos en la variable db. Esta es usada mucho después
  db = DBOpenRequest.result;

  // Ejecuta la función addData() para agregar los datos
  addData();
};

function addData() {
  // Crea un nuevo objeto listo para ser insertado en la IDB
  var newItem = [ { taskTitle: "Walk dog", hours: 19, minutes: 30, day: 24, month: "December", year: 2013, notified: "no" } ];

  // Inicia una transacción de lectura/escritura db transaction, lista para agregar los datos
  var transaction = db.transaction(["toDoList"], "readwrite");

  // Informa sobre el éxito de la inicio de la transacción
  transaction.oncomplete = function(event) {
    note.innerHTML += '&lt;li&gt;Transaction completed: database modification finished.&lt;/li&gt;';
  };


  transaction.onerror = function(event) {
  note.innerHTML += '&lt;li&gt;Transaction not opened due to error. Duplicate items not allowed.&lt;/li&gt;';
  };

  // Crea una almacén de objetos en la transacción
  var objectStore = transaction.objectStore("toDoList");

  // Agrega nuestro objeto newItem al almacén de objetos
  var objectStoreRequest = objectStore.add(newItem[0]);

  objectStoreRequest.onsuccess = function(event) {
    //Informa sobre el éxito de nuestro nuevo elemento en la base de datos
    note.innerHTML += '&lt;li&gt;New item added to database.&lt;/li&gt;';
  };
};</pre>
<h2 id="Parámetros">Parámetros</h2>
<dl>
 <dt>
  value</dt>
 <dd>
  El valor para ser almacenado.</dd>
 <dt>
  key</dt>
 <dd>
  La llave a usar para identificar el registro. Si no es especificada, el resultado es nulo.</dd>
</dl>
<h2 id="Especificación"><span style="font-size: 2.14285714285714rem;">Especificación</span></h2>
<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Especificación</th>
   <th scope="col">Estado</th>
   <th scope="col">Comentario</th>
  </tr>
  <tr>
   <td>{{SpecName('IndexedDB', '#widl-IDBObjectStore-add-IDBRequest-any-value-any-key', 'add()')}}</td>
   <td>{{Spec2('IndexedDB')}}</td>
   <td> </td>
  </tr>
 </tbody>
</table>
<h2 id="Browser_compatibility" name="Browser_compatibility">Compatibilidad de navegadores</h2>
<div>
 {{CompatibilityTable}}</div>
<div id="compat-desktop">
 <table class="compat-table">
  <tbody>
   <tr>
    <th>Característica</th>
    <th>Chrome</th>
    <th>Firefox (Gecko)</th>
    <th>Internet Explorer</th>
    <th>Opera</th>
    <th>Safari (WebKit)</th>
   </tr>
   <tr>
    <td>Soporte básico</td>
    <td>23{{property_prefix("webkit")}}<br>
     24</td>
    <td>10 {{property_prefix("moz")}}<br>
     {{CompatGeckoDesktop("16.0")}}</td>
    <td>10, partial</td>
    <td>15</td>
    <td>7.1</td>
   </tr>
  </tbody>
 </table>
</div>
<div id="compat-mobile">
 <table class="compat-table">
  <tbody>
   <tr>
    <th>Característica</th>
    <th>Android</th>
    <th>Firefox Mobile (Gecko)</th>
    <th>Firefox OS</th>
    <th>IE Phone</th>
    <th>Opera Mobile</th>
    <th>Safari Mobile</th>
   </tr>
   <tr>
    <td>Soporte básico</td>
    <td>4.4</td>
    <td>{{CompatGeckoMobile("22.0")}}</td>
    <td>1.0.1</td>
    <td>10</td>
    <td>22</td>
    <td>{{CompatNo}}</td>
   </tr>
  </tbody>
 </table>
</div>
<h2 id="Ver_también">Ver también</h2>
<ul>
 <li><a href="/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB">Usando IndexedDB</a></li>
 <li>Iniciando transacciones: {{domxref("IDBDatabase")}}</li>
 <li>Usando transacciones: {{domxref("IDBTransaction")}}</li>
 <li>Estableciendo un rango de llaves: {{domxref("IDBKeyRange")}}</li>
 <li>Obteniendo y haciendo cambios a tus datos: {{domxref("IDBObjectStore")}}</li>
 <li>Usando cursores: {{domxref("IDBCursor")}}</li>
 <li>Ejemplo de referencia: <a class="external" href="https://github.com/mdn/to-do-notifications/tree/gh-pages">To-do Notifications</a> (<a class="external" href="http://mdn.github.io/to-do-notifications/">ver ejemplo</a>.)</li>
</ul>