Не могу получить содержимое XMLHttpRequest запроса
Не могу понять как увидеть содержимое XMLHttpRequest POST запроса при передачи данных с клиентского js на серверный js.
Итак на стороне клиента в js файле создан XMLHttpRequest:
eventDrop: (info)=>{
var request = new XMLHttpRequest(),
path = "scheduler/eventDrop",
updatedEvent = {
"newStartDate": info.event._instance.range.start,
"newEndDate": info.event._instance.range.end
};
request.open("POST", path, true);
request.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
request.send(updatedEvent);
console.log(info);
console.log(updatedEvent);
},
На стороне сервера запроса обрабатывается так:
router.post('/scheduler/eventDrop', (req,res)=>{
var result = req.body;
console.log(typeof(result));
var data = JSON.stringify(result);
console.log(typeof(data));
console.log(data);
console.log(data.newStartDate);
});
Консоль показывает что result приходит в виде object, потом после JSON.stringify(result) превращается в string, выглядит это как пустые скобки {}, а запрос console.log(data.newStartDate) выдает undefined.
Подскажите пожалуйста, в чем ошибка? Как увидеть данные из запроса? Спасибо
//========Part 2================//
Совершенно уже запутался.
Итак пробую просто передать текст:
-на стороне клиента
eventDrop: (info)=>{
var request = new XMLHttpRequest(),
path = "scheduler/eventDrop";
request.open("POST", path, true);
request.setRequestHeader("Content-Type", 'text/plain');
request.send('test');
},
-на стороне сервера
router.post('/scheduler/eventDrop', (req,res)=>{
var result = req.body;
console.log(result);
console.log(typeof(result));
});
И все равно в результате в консоли {} и тип object!!!!
Почему?!! Помогите пожалуйста.
p.s. А если меняешь header на request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') то в консоли приходит { test: '' }
//==========Решение==================//
Нужно было добавить app.use(bodyParser.json()); чтобы body-parser мог разбирать JSON при получении.
Ответы (1 шт):
Вам стоит передавать данные формой:
eventDrop: (info)=>{
const request = new XMLHttpRequest(),
let path = "scheduler/eventDrop",
let data = new FormData();
data.append('newStartDate', info.event._instance.range.start);
data.append('newEndDate', info.event._instance.range.end);
request.open("POST", path, true);
request.send(data);
},
Если из каких-то соображений хотите именно жсон, то используйте get и интегрируйте жсон-строку в запрос