fixes
This commit is contained in:
parent
204d965821
commit
6bf5977407
7 changed files with 17 additions and 11 deletions
|
@ -29,4 +29,4 @@ vasya.lastName = 'Сидоров';
|
|||
alert( vasya.fullName ); // Василий Сидоров
|
||||
```
|
||||
|
||||
Важно: не рекомендуется дублировать одни и те же данные в различных свойствах. Поэтому в этой задаче `fullName` должно остаться свойством, а `firstName/lastName` -- реализованы через `get/set`.
|
||||
Важно: в этой задаче `fullName` должно остаться свойством, а `firstName/lastName` -- реализованы через `get/set`. Лишнее дублирование здесь ни к чему.
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
Основной метод для управления свойствами -- [Object.defineProperty](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty).
|
||||
|
||||
Он позволяет как просто объявить свойство объекта, так и тонко настроить его особые аспекты, которые никак иначе не изменить.
|
||||
Он позволяет объявить свойство объекта и, что самое главное, тонко настроить его особые аспекты, которые никак иначе не изменить.
|
||||
|
||||
Синтаксис:
|
||||
|
||||
|
@ -24,7 +24,9 @@ Object.defineProperty(obj, prop, descriptor)
|
|||
<dt>`prop`</dt>
|
||||
<dd>Имя свойства, которое нужно объявить или модифицировать.</dd>
|
||||
<dt>`descriptor`</dt>
|
||||
<dd>Дескриптор -- объект, который описывает поведение свойства. В нём могут быть следующие поля:
|
||||
<dd>Дескриптор -- объект, который описывает поведение свойства.
|
||||
|
||||
В нём могут быть следующие поля:
|
||||
|
||||
<ul>
|
||||
<li>`value` -- значение свойства, по умолчанию `undefined`</li>
|
||||
|
|
|
@ -208,7 +208,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>`cut/copy/paste`</td>
|
||||
<td>Срабатывают при вставке/копировании/удалении текста. В них можно отменить действие браузера, и тогда вставке/копирования/удаления не произойдёт.</td>
|
||||
<td>Срабатывают при вставке/копировании/удалении текста. Если в их обработчиках отменить действие браузера, то вставки/копирования/удаления не произойдёт.</td>
|
||||
<td>Вставляемое значение получить нельзя: на момент срабатывания события в элементе всё ещё *старое* значение, а новое недоступно.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
|
|
@ -211,7 +211,7 @@ function postToIframe(url, data, target) {
|
|||
<li>В любых, даже самых старых IE, можно обмениваться данными через `window.name`. Эта переменная хранит "имя" окна или фрейма, которое не меняется при перезагрузке страницы.
|
||||
|
||||
Поэтому если мы сделали `POST` в `<iframe>` на другой домен и он поставил `window.name = "Вася"`, а затем сделал редирект на основной домен, то эти данные станут доступны внешней странице.</li>
|
||||
<li>Также в совсем старых IE можно обмениваться данными через хеш, то есть фрагмент URL после `#`. Его изменение доступно между ифреймами с разных доменов и не переводит к перезагрузке страницы. Таким образом они могут передавать данные друг другу. Есть готовые библиотеки, которые реализуют этот подход, например [Porthole](http://ternarylabs.github.io/porthole/).</li>
|
||||
<li>Также в совсем старых IE можно обмениваться данными через хеш, то есть фрагмент URL после `#`. Его изменение доступно между ифреймами с разных доменов и не приводит к перезагрузке страницы. Таким образом они могут передавать данные друг другу. Есть готовые библиотеки, которые реализуют этот подход, например [Porthole](http://ternarylabs.github.io/porthole/).</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
|
|
@ -172,7 +172,7 @@ Content-Disposition: form-data; name="*!*surname*/!*"
|
|||
|
||||
Достаточно указать в заголовке `Content-Type` кодировку и границу, и далее сформировать тело запроса, удовлетворяющее требованиям кодировки.
|
||||
|
||||
Пример кода для пересылке того же запроса, что и раньше, в кодировке `multipart/form-data`:
|
||||
Пример кода для того же запроса, что и раньше, теперь в кодировке `multipart/form-data`:
|
||||
|
||||
```js
|
||||
var data = {
|
||||
|
@ -268,7 +268,7 @@ Content-Type: image/jpeg
|
|||
|
||||
XMLHttpRequest сам по себе не ограничивает кодировку и формат пересылаемых данных.
|
||||
|
||||
Поэтому просто для обмена данными JS <-> сервер, без всяких форма, часто используется POST с JSON:
|
||||
Поэтому для обмена данными часто используется формат JSON:
|
||||
|
||||
```js
|
||||
var xhr = new XMLHttpRequest();
|
||||
|
@ -283,6 +283,10 @@ xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8');
|
|||
|
||||
xhr.onreadystatechange = ...;
|
||||
|
||||
*!*
|
||||
// Отсылаем объект в формате JSON и с Content-Type application/json
|
||||
// Сервер должен уметь такой Content-Type принимать и раскодировать
|
||||
*/!*
|
||||
xhr.send(json);
|
||||
```
|
||||
|
||||
|
|
|
@ -74,7 +74,7 @@ xhr.send();
|
|||
</li>
|
||||
</ol>
|
||||
|
||||
"Непростыми" считаются все остальные, например, запрос с методом `PUT` или с заголовком `Authorization` будет не подходит под ограничения выше.
|
||||
"Непростыми" считаются все остальные, например, запрос с методом `PUT` или с заголовком `Authorization` не подходит под ограничения выше.
|
||||
|
||||
Принципиальная разница между ними заключается в том, что "простой" запрос можно сформировать и отправить на сервер и без XMLHttpRequest, например при помощи HTML-формы.
|
||||
|
||||
|
@ -84,7 +84,7 @@ xhr.send();
|
|||
|
||||
А вот запросы с нестандартными заголовками или с методом `DELETE` таким образом не создать. Поэтому старый сервер может быть к ним не готов. Или, к примеру, он может полагать, что такие запросы веб-страница в принципе не умеет присылать, значит они пришли из привелигированного приложения, и дать им слишком много прав.
|
||||
|
||||
Поэтому при посылкой "непростых" запросов нужно специальным образом спросить у сервера, согласен ли он в принципе на подобные кросс-доменные запросы или нет? И, если сервер не ответит, что согласен -- значит, нет.
|
||||
Поэтому при посылке "непростых" запросов нужно специальным образом спросить у сервера, согласен ли он в принципе на подобные кросс-доменные запросы или нет? И, если сервер не ответит, что согласен -- значит, нет.
|
||||
|
||||
[summary]
|
||||
В спецификации CORS, как мы увидим далее, есть много деталей, но все они объединены единым принципом: новые возможности доступны только с явного согласия сервера (по умолчанию -- нет).
|
||||
|
|
|
@ -173,9 +173,9 @@ function upload(file) {
|
|||
|
||||
## Файлы и формы
|
||||
|
||||
Выше мы использовали `xhr.send(file)` для посылки файл пересылается в теле запроса.
|
||||
Выше мы использовали `xhr.send(file)` для передачи файла непосредственно в теле запроса.
|
||||
|
||||
При этом посылается только содержимое файла.
|
||||
При этом посылается только *содержимое* файла.
|
||||
|
||||
Если нужно дополнительно передать имя файла или что-то ещё -- это можно удобно сделать через форму, при помощи объекта [FormData](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/FormData/Using_FormData_Objects):
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue