У меня есть форма с полем ввода и выбора для получения пользовательских данных. И я хочу отправить вызов ajax через обработчик кнопки отправки, чтобы сохранить пользовательские данные на сервере.

Вот скелет кода,

Сторона клиента:

xhr.open("POST", "/upload", true)
xhr.onreadystatechange = function() {
  if (xhr.readyState === 4) {
    if (xhr.status === 200) {
      log('ajax succeed')
    } else {
      log('ajax failed')
    }
  }
}
console.log(data) // the data is not empty
xhr.send(data)

На стороне сервера:

import express from 'express'
import bodyParser from 'body-parser'

var app = express()
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))

app.post('/upload', (req, res) => {
  console.log(req.body) // get "{}"
  res.send('greetings from Express!')
})

Вызов ajax достигает конечной точки сервера и может правильно отправить сообщение обратно клиенту, но почему я не могу получить эти данные формы из req.body?

-1
lxyyz 28 Дек 2016 в 07:06
Есть какие-нибудь намеки на то, как выглядит data?
 – 
Phil
28 Дек 2016 в 07:08
Форма данных вроде этого: { username, uploaded_file, selected_options }
 – 
Xlee
28 Дек 2016 в 07:11
Итак, data - это настоящий объект JavaScript? Вы хотите отправить его как application/x-www-form-urlencoded (что вы пытаетесь сделать в настоящее время) или как JSON?
 – 
Phil
28 Дек 2016 в 07:12
Да, это JS-объект. Я просто хочу сначала подключиться к apis серверной части, так как они мне нужны как параметры.
 – 
Xlee
28 Дек 2016 в 07:14

1 ответ

Лучший ответ

Похоже, вы не отправляете правильный формат тела для типа контента, который вы говорите серверу, поэтому он не может проанализировать данные.

Попробуйте это (на стороне клиента)

xhr.setRequestHeader('Content-type', 'application/json')
xhr.send(JSON.stringify(data))
2
Phil 28 Дек 2016 в 07:16