Skip to content

Commit edb5fa7

Browse files
Otoniel Reyes Galayjoaquinelio
andauthored
Apply suggestions from code review
Co-authored-by: joaquinelio <joaquinelio@gmail.com>
1 parent f42b65c commit edb5fa7

1 file changed

Lines changed: 60 additions & 60 deletions

File tree

5-network/08-xmlhttprequest/article.md

Lines changed: 60 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -37,27 +37,27 @@ Para hacer la petición, necesitamos seguir 3 pasos:
3737

3838
- `method` -- método HTTP. Usualmente `"GET"` o `"POST"`.
3939
- `URL` -- la URL a solicitar, una cadena, puede ser un objeto [URL](info:url).
40-
- `async` -- si se asigna explic&iacute;tamente a `false`, entonces la petici&oacute;n ser&aacute; asincr&oacute;nica, Cubriremos esto un poco m&aacute;s adelante.
41-
- `user`, `password` -- usuario y contrase&ntilde;a para autenticaci&oacute;n HTTP b&aacute;sica (si se requiere).
40+
- `async` -- si se asigna explícitamente a `false`, entonces la petición será asincrónica. Cubriremos esto un poco más adelante.
41+
- `user`, `password` -- usuario y contraseña para autenticación HTTP básica (si se requiere).
4242

43-
Por favor, toma en cuenta que la llamada a `open`, contrario a su nombre, no abre la conecci&oacute;n. Solo configura la solicitud, pero la actividad de red solo empieza con la llamada del m&eacute;todo `send`.
43+
Por favor, toma en cuenta que la llamada a `open`, contrario a su nombre, no abre la conexión. Solo configura la solicitud, pero la actividad de red solo empieza con la llamada del método `send`.
4444

4545
3. Enviar.
4646

4747
```js
4848
xhr.send([body])
4949
```
5050

51-
Este m&eacute;todo abre la conecci&oacute;n y env&iacute;a ka solicitud al servidor. El par&aacute;metro adicional `body` contiene el cuerpo de la solicitud.
51+
Este método abre la conexión y envía ka solicitud al servidor. El parámetro adicional `body` contiene el cuerpo de la solicitud.
5252

53-
Algunos m&eacute;todos como `GET` no tienen un cuerpo. Y otros como `POST` usan el par&aacute;metro `body` para enviar datos al servidor. Vamos a ver unos ejemplos de eso m&aacute;s tarde.
53+
Algunos métodos como `GET` no tienen un cuerpo. Y otros como `POST` usan el parámetro `body` para enviar datos al servidor. Vamos a ver unos ejemplos de eso más tarde.
5454

5555
4. Escuchar los eventos de respuesta `xhr`.
5656

57-
Estos son los tres eventos m&aacute;s comunmente utilizados:
58-
- `load` -- cuando la solicitud est&aacute; completa (incluso si el estado HTTP es 400 o 500), y la respuesta se descarg&oacute; por completo.
59-
- `error` -- cuando la solicitud no pudo ser realizada satisfactoriamente, ej. red ca&iacute;da o una URL inv&aacute;lida.
60-
- `progress` -- se dispara peri&oacute;dicamente mientras la respuesta est&aacute; siendo descargada, reporta cu&aacute;nto se ha descargado.
57+
Estos son los tres eventos más comúnmente utilizados:
58+
- `load` -- cuando la solicitud está; completa (incluso si el estado HTTP es 400 o 500), y la respuesta se descargó por completo.
59+
- `error` -- cuando la solicitud no pudo ser realizada satisfactoriamente, ej. red caída o una URL inválida.
60+
- `progress` -- se dispara periódicamente mientras la respuesta está siendo descargada, reporta cuánto se ha descargado.
6161

6262
```js
6363
xhr.onload = function() {
@@ -69,26 +69,26 @@ Para hacer la petición, necesitamos seguir 3 pasos:
6969
};
7070

7171
xhr.onprogress = function(event) { // se dispara periodicamente
72-
// event.loaded - cuantos bytes se han descargado
72+
// event.loaded - cuántos bytes se han descargado
7373
// event.lengthComputable = devuelve true si el servidor envia la cabecera Content-Length (longitud del contenido)
74-
// event.total - numero total de bytes (si lengthComputable es true)
74+
// event.total - número total de bytes (si `lengthComputable` es `true`)
7575
alert(`Recibido ${event.loaded} of ${event.total}`);
7676
};
7777
```
7878

79-
Aqu&iacute; un ejemplo completo. El siguiente c&oacute;digo carga la URL en `/article/xmlhttprequest/example/load` desde el servidor e imprime el progreso:
79+
Aquí un ejemplo completo. El siguiente código carga la URL en `/article/xmlhttprequest/example/load` desde el servidor e imprime el progreso:
8080

8181
```js run
8282
// 1. Crea un nuevo objeto XMLHttpRequest
8383
let xhr = new XMLHttpRequest();
8484
85-
// 2. Configuracion: solicitud GET para la URL /article/.../load
85+
// 2. Configuración: solicitud GET para la URL /article/.../load
8686
xhr.open('GET', '/article/xmlhttprequest/example/load');
8787
88-
// 3. Envia la solicitud a la red
88+
// 3. Envía la solicitud a la red
8989
xhr.send();
9090
91-
// 4. Esto se llamara despues de que la respuesta se reciba
91+
// 4. Esto se llamará después de que la respuesta se reciba
9292
xhr.onload = function() {
9393
if (xhr.status != 200) { // analiza el estado HTTP de la respuesta
9494
alert(`Error ${xhr.status}: ${xhr.statusText}`); // ej. 404: No encontrado
@@ -114,30 +114,30 @@ xhr.onerror = function() {
114114
Una vez el servidor haya respondido, podemos recibir el resultado en las siguientes propiedades de `xhr`:
115115

116116
`status`
117-
: C&oacute;digo del estado HTTP (un n&uacute;mero): `200`, `404`, `403` y as&iacute; por el estilo, puede ser `0` en caso de una falla no HTTP.
117+
: Código del estado HTTP (un número): `200`, `404`, `403` y así por el estilo, puede ser `0` en caso de una falla no HTTP.
118118

119119
`statusText`
120-
: Mensaje del estado HTTP (una cadena): usualmente `OK` para `200`, `Not Found` para `404`, `Forbidden` para `403` y as&acute; por el estilo.
120+
: Mensaje del estado HTTP (una cadena): usualmente `OK` para `200`, `Not Found` para `404`, `Forbidden` para `403` y así por el estilo.
121121

122-
`response` (scripts antig&uuml;os deben usar `responseText`)
122+
`response` (scripts antiguos deben usar `responseText`)
123123
: El cuerpo de la respuesta del servidor.
124124

125-
Tambi&eacute;n podemos espec&iacute;ficar un tiempo l&iacute;mite usando la propiedad correspondiente:
125+
También podemos especificar un tiempo límite usando la propiedad correspondiente:
126126

127127
```js
128-
xhr.timeout = 10000; // limite de tiempo en milisegundos, 10 segundos
128+
xhr.timeout = 10000; // límite de tiempo en milisegundos, 10 segundos
129129
```
130130

131-
Si la solicitud no es realizada con &eacute;xito dentro del tiempo dado, se cancela y el evento `timeout` se activa.
131+
Si la solicitud no es realizada con éxito dentro del tiempo dado, se cancela y el evento `timeout` se activa.
132132

133133
````smart header="Par&aacute;metros de búsqueda URL"
134-
Para agregar los parametros a la URL, como `?nombre=valor`, y asegurar la codificacion adecuada, podemos utilizar un objeto [URL](info:url):
134+
Para agregar los parámetros a la URL, como `?nombre=valor`, y asegurar la codificación adecuada, podemos utilizar un objeto [URL](info:url):
135135

136136
```js
137137
let url = new URL('https://google.com/search');
138-
url.searchParams.set('q', 'pruebame!');
138+
url.searchParams.set('q', 'pruébame!');
139139
140-
// el parametro 'q' esta codificado
140+
// el parámetro 'q' está codificado
141141
xhr.open('GET', url); // https://google.com/search?q=test+me%21
142142
```
143143

@@ -149,10 +149,10 @@ Podemos usar la propiedad `xhr.responseType` para asignar el formato de la respu
149149

150150
- `""` (default) -- obtiene una cadena,
151151
- `"text"` -- obtiene una cadena,
152-
- `"arraybuffer"` -- obtiene un `ArrayBuffer` (para datos binarios, vee el cap&iacute;tulo <info:arraybuffer-binary-arrays>),
153-
- `"blob"` -- obtiene un `Blob` (para datos binarios, vee el cap&iacute;tulo <info:blob>),
154-
- `"document"` -- obtiene un documento XML (puede usar XPath y otros m&eacute;todos XML),
155-
- `"json"` -- obtiene un JSON (autom&aacute;ticamente analizado).
152+
- `"arraybuffer"` -- obtiene un `ArrayBuffer` (para datos binarios, vee el capítulo <info:arraybuffer-binary-arrays>),
153+
- `"blob"` -- obtiene un `Blob` (para datos binarios, ver el capítulo <info:blob>),
154+
- `"document"` -- obtiene un documento XML (puede usar XPath y otros métodos XML),
155+
- `"json"` -- obtiene un JSON (automáticamente analizado).
156156

157157
Por ejemplo, obtengamos una respuesta como JSON:
158158

@@ -175,26 +175,26 @@ xhr.onload = function() {
175175
```
176176

177177
```smart
178-
En los scripts antig&uuml;os debes encontrar tambi&eacute;n las propiedades `xhr.responseText` e incluso `xhr.responseXML`.
178+
En los scripts antiguos puedes encontrar también las propiedades `xhr.responseText` e incluso `xhr.responseXML`.
179179
180-
Existen por razones hist&oacute;ricas, para obtener ya sea una cadena o un documento XML. Hoy en d&iacute;a, debemos seleccionar el formato en `xhr.responseType` y obtener `xhr.response` como se demuestra debajo.
180+
Existen por razones históricas, para obtener ya sea una cadena o un documento XML. Hoy en día, debemos seleccionar el formato en `xhr.responseType` y obtener `xhr.response` como se demuestra debajo.
181181
```
182182

183183
## Estados
184184

185185
`XMLHttpRequest` cambia entre estados a medida que avanza. El estado actual es accesible como `xhr.readyState`.
186186

187-
Todos los estados, como en [la especificaci&oacute;n](https://xhr.spec.whatwg.org/#states):
187+
Todos los estados, como en [la especificación](https://xhr.spec.whatwg.org/#states):
188188

189189
```js
190190
UNSENT = 0; // estado inicial
191191
OPENED = 1; // llamada abierta
192192
HEADERS_RECEIVED = 2; // cabeceras de respuesta recibidas
193-
LOADING = 3; // la respuesta esta cargando (un paquete de datos es recibido)
193+
LOADING = 3; // la respuesta está cargando (un paquete de datos es recibido)
194194
DONE = 4; // solicitud completa
195195
```
196196

197-
Un objeto `XMLHttpRequest` escala en orden `0` -> `1` -> `2` -> `3` -> ... -> `3` -> `4`. El estado `3` se repite cada vez que un paquete de datos se recibe a trav&eacute;z de la red.
197+
Un objeto `XMLHttpRequest` escala en orden `0` -> `1` -> `2` -> `3` -> ... -> `3` -> `4`. El estado `3` se repite cada vez que un paquete de datos se recibe a través de la red.
198198

199199
Podemos seguirlos usando el evento `readystatechange`:
200200

@@ -209,7 +209,7 @@ xhr.onreadystatechange = function() {
209209
};
210210
```
211211

212-
Puedes encontrar oyentes del evento `readystatechange` en c&oacute;digo realmente viejo, est&aacute; ah&iacute; por razones hist&oacute;ricas, hab&iacute;a un tiempo cuando no hab&iacute;a `load` y otros evento. Hoy en d&iacute;a, los manipuladores `load/error/progress` lo hacen obsoleto.
212+
Puedes encontrar oyentes del evento `readystatechange` en código realmente viejo, está ahí por razones históricas, había un tiempo cuando no existían `load` y otros eventos. Hoy en día los manipuladores `load/error/progress` lo hacen obsoleto.
213213

214214
## Abortando solicitudes
215215

@@ -221,13 +221,13 @@ xhr.abort(); // termina la solicitud
221221

222222
Este dispara el evento `abort`, y el `xhr.status` se convierte en `0`.
223223

224-
## Solicitudes sincr&oacute;nicas
224+
## Solicitudes sincrónicas
225225

226-
Si en el m&eacute;todo `open` el tercer par&aacute;metro `async` se asigna como `false`, la solicitud se hace sincr&oacute;nicamente.
226+
Si en el método `open` el tercer parámetro `async` se asigna como `false`, la solicitud se hace sincrónicamente.
227227

228-
En otras palabras, la ejecuci&oacute;n de JavaScript se pause en el `send()` y se resume cuando la respuesta es recibida. Algo como comandos `alert` o `prompt`.
228+
En otras palabras, la ejecución de JavaScript se pausa en el `send()` y se reanuda cuando la respuesta es recibida. Algo como los comandos `alert` o `prompt`.
229229

230-
Aqu&iacute; est&aacute; el ejemplo reescrito, el tercer par&aacute;metro de `open` es `false`:
230+
Aquí está el ejemplo reescrito, el tercer parámetro de `open` es `false`:
231231

232232
```js
233233
let xhr = new XMLHttpRequest();
@@ -246,17 +246,17 @@ try {
246246
}
247247
```
248248

249-
Puede verse bien, pero las llamadas sincr&oacute;nicas son rara vez utilizadas, porque bloquean todo el JavaScript de la p&aacute;gina hasta que la carga est&eacute; completa. En algunos navegadores se hace imposible hacer scroll. Si una llamada s&iacute;ncrona toma mucho tiempo, el navegador puede sugerir cerrar el sitio web "colgado".
249+
Puede verse bien, pero las llamadas sincrónicas son rara vez utilizadas porque bloquean todo el JavaScript de la página hasta que la carga está completa. En algunos navegadores se hace imposible hacer scroll. Si una llamada síncrona toma mucho tiempo, el navegador puede sugerir cerrar el sitio web "colgado".
250250

251-
Algunas capacidades avanzadas de `XMLHttpRequest`, como solicitar desde otro dominio o especificando un tiempo l&iacute;mite, no est&aacute;n disponibles para solicitudes s&iacute;ncronas. Tambi&eacute;n, como puedes ver, sin indicaci&oacute;n de progreso.
251+
Algunas capacidades avanzadas de `XMLHttpRequest`, como solicitar desde otro dominio o especificar un tiempo límite, no están disponibles para solicitudes ncronas. Tampoco, como puedes ver, la indicación de progreso.
252252

253-
La raz&oacute;n de esto, es que las solicitudes sincr&oacute;nicas son utilizadas muy escasamente, casi nunca. No hablaremos m&aacute;s sobre ellas.
253+
La razón de esto es que las solicitudes sincrónicas son utilizadas muy escasamente, casi nunca. No hablaremos más sobre ellas.
254254

255255
## Cabeceras HTTP
256256

257257
`XMLHttpRequest` permite tanto enviar cabeceras personalizadas como leer cabeceras de la respuesta.
258258

259-
Existen 3 metodos para las cabeceras HTTP:
259+
Existen 3 métodos para las cabeceras HTTP:
260260

261261
`setRequestHeader(name, value)`
262262
: Asigna la cabecera de la solicitud con los valores `name` y `value` provistos.
@@ -269,23 +269,23 @@ Existen 3 metodos para las cabeceras HTTP:
269269

270270
```warn header="Limitaciones de cabeceras"
271271
Muchas cabeceras se administran exclusivamente por el navegador, ej. `Referer` y `Host`.
272-
La lista completa est&aacute; [en la especificaci&aacute;n](http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader-method).
272+
La lista completa está [en la especificación](http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader-method).
273273
274-
`XMLHttpRequest` no est&aacute; permitido cambiarlos, por motivos de seguridad del usuario y la exactitud de la solicitud.
274+
`XMLHttpRequest` no está permitido cambiarlos, por motivos de seguridad del usuario y la exactitud de la solicitud.
275275
```
276276

277277
````warn header="No se pueden eliminar cabeceras"
278278
Otra peculiaridad de `XMLHttpRequest` es que no puede deshacer un `setRequestHeader`.
279279

280-
Una vez que una cabecera es asignada, ya est&aacute; asignada. Llamadas adicionales agregan informaci&oacute;n a la cabecera, no la sobre-escriben.
280+
Una vez que una cabecera es asignada, ya está asignada. Llamadas adicionales agregan información a la cabecera, no la sobreescriben.
281281

282282
Por ejemplo:
283283

284284
```js
285285
xhr.setRequestHeader('X-Auth', '123');
286286
xhr.setRequestHeader('X-Auth', '456');
287287
288-
// la cabecera ser&aacute;:
288+
// la cabecera será:
289289
// X-Auth: 123, 456
290290
```
291291
````
@@ -302,7 +302,7 @@ Existen 3 metodos para las cabeceras HTTP:
302302
`getAllResponseHeaders()`
303303
: Devuelve todas las cabeceras de la respuesta, excepto por `Set-Cookie` y `Set-Cookie2`.
304304

305-
Las cabeceras se devuelven como una sola l&iacute;nea, ej.:
305+
Las cabeceras se devuelven como una sola línea, ej.:
306306

307307
```http
308308
Cache-Control: max-age=31536000
@@ -311,11 +311,11 @@ Existen 3 metodos para las cabeceras HTTP:
311311
Date: Sat, 08 Sep 2012 16:53:16 GMT
312312
```
313313

314-
El salto de l&iacute;nea entre las cabeceras siempre es un `"\r\n"` (independiente del SO), as&iacute; podemos dividirlas en cabeceras individuales. El separador entre el nombre y el valor siempre es dos puntos seguido de un espacio `": "`. Eso se fija en la especificaci&oacute;n.
314+
El salto de línea entre las cabeceras siempre es un `"\r\n"` (independiente del SO), así podemos dividirlas en cabeceras individuales. El separador entre el nombre y el valor siempre es dos puntos seguido de un espacio `": "`. Eso quedó establecido en la especificación.
315315

316-
As&iacute;, si queremos obtener un objeto con pares nombre/valor, necesitamos tratarlas con un poco de JS.
316+
Así, si queremos obtener un objeto con pares nombre/valor, necesitamos tratarlas con un poco de JS.
317317

318-
Como esto (asumiendo que si dos cabeceras tienen el mismo nombre, entonces el &uacute;ltimo sobreecribe al primero):
318+
Como esto (asumiendo que si dos cabeceras tienen el mismo nombre, entonces el útimo sobreecribe al primero):
319319

320320
```js
321321
let headers = xhr
@@ -338,12 +338,12 @@ La sintaxis:
338338

339339
```js
340340
let formData = new FormData([form]); // crea un objeto, opcionalmente se completa con un <form>
341-
formData.append(name, value); // a&ntilde;ade un campo
341+
formData.append(name, value); // añade un campo
342342
```
343343

344-
Lo creamos, opcionalmente lleno desde un formulario, `append` (agrega) m&aacute;s campos si se necesitan, y entonces:
344+
Lo creamos, opcionalmente lleno desde un formulario, `append` (agrega) más campos si se necesitan, y entonces:
345345

346-
1. `xhr.open('POST', ...)` – se utiliza el m&eacute;todo `POST`.
346+
1. `xhr.open('POST', ...)` – se utiliza el método `POST`.
347347
2. `xhr.send(formData)` para enviar el formulario al servidor.
348348

349349
Por ejemplo:
@@ -358,7 +358,7 @@ Por ejemplo:
358358
// pre llenado del objeto FormData desde el formulario
359359
let formData = new FormData(document.forms.person);
360360
361-
// agrega un campo m&aacute;s
361+
// agrega un campo más
362362
formData.append("middle", "Lee");
363363
364364
// lo enviamos
@@ -370,11 +370,11 @@ Por ejemplo:
370370
</script>
371371
```
372372

373-
El formulario fue enviado con codificaci&oacute;n `multipart/form-data`.
373+
El formulario fue enviado con codificación `multipart/form-data`.
374374

375-
O, si nos gusta m&aacute;s JSON, entonces, un `JSON.stringify` y lo enviamos como un string.
375+
O, si nos gusta más JSON, entonces, un `JSON.stringify` y lo enviamos como un string.
376376

377-
Solo no te olvides de asignar la cabecera `Content-Type: application/json`, muchos frameworks del lado del servidor decodifican autom&aacute;ticamente JSON con este:
377+
Solo no te olvides de asignar la cabecera `Content-Type: application/json`, muchos frameworks del lado del servidor decodifican automáticamente JSON con este:
378378

379379
```js
380380
let xhr = new XMLHttpRequest();
@@ -390,17 +390,17 @@ xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8');
390390
xhr.send(json);
391391
```
392392

393-
El m&eacute;todo `.send(body)` es bastante omnivoro. Puede enviar casi cualquier `body`, incluyendo objetos `Blob` y `BufferSource`.
393+
El método `.send(body)` es bastante omnívoro. Puede enviar casi cualquier `body`, incluyendo objetos `Blob` y `BufferSource`.
394394

395395
## Progreso de carga
396396

397397
El evento `progress` se dispara solo en la fase de descarga.
398398

399399
Esto es: si hacemos un `POST` de algo, `XMLHttpRequest` primero sube nuestros datos (el cuerpo de la respuesta), entonces descarga la respuesta.
400400

401-
Si estamos subiendo algo grande, entonces seguramente estaremos interesados en rastrear el progreso de nuestra carga. Pero `xhr.onprogress` no ayuda aqu&iacute;.
401+
Si estamos subiendo algo grande, entonces seguramente estaremos interesados en rastrear el progreso de nuestra carga. Pero `xhr.onprogress` no ayuda aquí.
402402

403-
Hay otro objeto, sin m&eacute;todos, exclusivamente para rastrear los eventos de subida: `xhr.upload`.
403+
Hay otro objeto, sin métodos, exclusivamente para rastrear los eventos de subida: `xhr.upload`.
404404

405405
&Eacute;ste genera eventos, similares a `xhr`, pero `xhr.upload` se dispara solo en las subidas:
406406

0 commit comments

Comments
 (0)