Page 146 - 6108
P. 146

xhr.send ();
                     Браузер автоматично додасть до запиту найважливіші HTTP-заголовки,
               такі як Content-Length і Connection.
                     Запит, надісланий кодом вище через XMLHttpRequest, ніяк не
               відрізняється від звичайної відправки форми. Сервер не в змозі їх відрізнити,
               але можна вказати спеціальний заголовок

                     xhr.setRequestHeader ( "X-Requested-With", "XMLHttpRequest");

                     Метод POST
                     У  стандартних  HTTP-формах  для  методу  POST  доступні  три  кодування,
               що задаються через атрибут enctype:
                     application/x-www-form-urlencoded (за умовчанням);
                     text-plain
                     multipart/form-data
                     Залежно  від  enctype  браузер  кодує  дані  відповідним  способом  перед
               відправкою  на  сервер.  У  випадку  з  XMLHttpRequest  ми,  взагалі  кажучи,  не
               зобов'язані  використовувати  жоден  з  цих  способів.  Головне,  щоб  сервер  наш
               запит  зрозумів.  Але  зазвичай  найпростіше  вибрати  якийсь  із  стандартних.
               Зокрема,  при  POST  обов'язковий  заголовок  Content-Type,  що  містить
               кодування.  Це  вказівка  для  сервера  -  як  обробляти  (розкодувати)  прийшов
               запит.

                     let xhr = new XMLHttpRequest();
                     let body = 'name=' + encodeURIComponent(name) +
                       '&surname=' + encodeURIComponent(surname);
                     xhr.open("POST", '/submit');
                     xhr.setRequestHeader('Content-Type', 'application/x-www-form-
               urlencoded');
                     xhr.send(body);

                     У кодуванні multipart/form-data  поля пересилаються одне за одним,
               через рядок-роздільник.  При цьому значення не кодуються, а щоб було чітко
               зрозуміло,  яке  значення  де  -  поля  розділені  випадково  згенерованим  рядком,
               який  називають  «boundary»  (англ.  межа),  який  вказується  у  відповідному
               заголовку. Формат відправлення буде наступним:
                     Content-Type: multipart/form-data; boundary=aBoundaryString

                     --aBoundaryString
                     Content-Disposition: form-data; name="myFile";
               filename="img.jpg"
                     Content-Type: image/jpeg

                     (data)
                     --aBoundaryString
                     Content-Disposition: form-data; name="myField"

                     (data)
                     --aBoundaryString
                     (more subparts)
                     --aBoundaryString--
   141   142   143   144   145   146   147   148   149   150   151