Имя: Пароль:
IT
Веб-мастеринг
JS почему не формируется заголовок POST
,
0 vde69
 
15.04.21
23:07
отрабатывает:

function send_set(el_op) {    
    var request = new XMLHttpRequest();
    request.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            var vdat = JSON.parse(this.responseText);
            if (vdat !== null && typeof vdat == 'ok') { close_set(el_op); }}}
    el = document.getElementById('forms_edit_i');
    request.open('POST', 'ajax_set_data', true);
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    request.send('<'+el.name+'='+el.value+';'+localStorage.getItem('crc')+'>');    
}

но в отправляемых данных нет "Request Method: POST", вот что отправляется

Request URL: http://192.168.10.101/ajax_set_data
Referrer Policy: strict-origin-when-cross-origin
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Connection: keep-alive
Content-Length: 25
Content-Type: application/x-www-form-urlencoded
DNT: 1
Host: 192.168.10.101
Origin: http://192.168.10.101
Referer: http://192.168.10.101/
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36

<t_time_start: 12:33;null>
1 Плюс Ультра
 
15.04.21
23:20
(0) Проверил щас твою функцию, все нормально там отправляется, POST присутствует
2 Плюс Ультра
 
15.04.21
23:23
XMLHttpRequest лучше не используй, это прошлый век. Делай так:


fetch("ajax_set_data", {
  "headers": {
    "content-type": "application/x-www-form-urlencoded",
  },
  "body": '<'+el.name+'='+el.value+';'+localStorage.getItem('crc')+'>',
  "method": "POST",
});
4 Джошуа Бродвел
 
16.04.21
16:59
ТС, куда пропал?
5 vde69
 
16.04.21
21:18
работа затянула :) разобрался, вот так правильно

'<'+el.name+'='+el.value+';'+localStorage.getItem('crc')+'>\r\n';
6 Джошуа Бродвел
 
16.04.21
22:34
(5) Это ни на что не должно было повлиять. Только в боди добавятся два символа, в остальном работает так же.
7 vde69
 
16.04.21
22:50
(6) это влияет на определение конца данных post, например Content-Length - не обязательный, без него по спеке данные должны завершатся пустой строкой.

В моем случае ошибка была в том, что я на сервере не получал сами данные POST запроса и поэтому статус ответа был не равен 200
8 Джошуа Бродвел
 
17.04.21
00:08
(7) Значит у тебя либо сервер неправильно парсит запрос, либо клиент неправильно отправляет. Потому что XMLHttpRequest сам добавляет нужное количество разделителей куда надо. Ты же их добавил прямо в тело запроса, значит эти разделители должны приняться сервером тоже в теле запроса, а это не то что ты хотел.
9 Вафель
 
17.04.21
11:02
В таком формате те должно быть
Имя1=значение1&имя1=значение2&...
10 Вафель
 
17.04.21
11:02
Значение нужно кодировать как урл
11 Вафель
 
17.04.21
11:03
Xml там никакого нет
12 vde69
 
17.04.21
11:56
(10) формат там произвольный единственное ограничение это код символа от 32 до 127
(8) да, у меня сарвер самописный, собственно его и отлаживаю...
13 Вафель
 
17.04.21
12:04
Ну тогда и заголовок ставь нормальный
application/xml
14 Бакуго
 
17.04.21
23:02
(12) Как я уже писал, значит проблема именно в сервере. \r\n добавлять в тело запроса нет никакой необходимости. Если отправляешь из современного браузера на подобии Гугл Хрома или Микрософт Эдж, то запрос формируется 100% корректный.