При отправке ajax POST FormData объект ключ и значение не соответствуют заданным - PullRequest
0 голосов
/ 03 июня 2019

Я программно устанавливаю данные формы следующим образом:

    const formData = new FormData();
    formData.append('id', '12345678');

После чего я отправляю запрос POST с этим объектом. (используя угловой HttpClient).

Я использую Postman для отладки запроса и просмотра того, какие значения были отправлены, импортируя запрос как cURL, и я вижу, что значения formData отображаются по-разному.

key:------WebKitFormBoundaryI1mdsdmKkradYVMS\r\nContent-Disposition: form-data; name

value: "id"\r\n\r\n12345678\r\n------WebKitFormBoundaryI1mdsdmKkradYVMS--\r\n

Что я делаю не так?

Я хочу отправить данные, чтобы сервер получал запрос x-form-urlencoded со следующим объектом:

key: id
value: 12345678

РЕДАКТИРОВАТЬ: Решение заключается в следующем:

 const body = new URLSearchParams({id: "12345678"});

    const httpOptions = {
      headers: new HttpHeaders({
        'Content-Type':  'application/x-www-form-urlencoded',
      })
    };
    return this.http.post(url, body.toString(), httpOptions).pipe(mergeMap( (response:any) => {
      console.log('response ', response);
      return of (response);
    }));

Спасибо, Ярон

Ответы [ 2 ]

2 голосов
/ 03 июня 2019

FormData объекты генерируют multipart/form-data, а не application/x-www-form-urlencoded по умолчанию.

Они предназначены для обработки загрузок файлов, для которых нет стандартного метода кодирования в application/x-www-form-urlencoded.

Используйте объект URLSearchParams , если вы хотите сгенерировать application/x-www-form-urlencoded данные.

const formData = new FormData();
formData.append('id', '12345678');
const query = new URLSearchParams(formData);
console.log(query.toString());
0 голосов
/ 03 июня 2019

@ Ответ Квентина все хорошо, но не подходит Angular.

Просто передайте второй параметр вашему вызову GET:

return this.http.get<any>('url', { params: { id: '123456789' }});

Вам не нужно отправлять запросы на публикацию, чтобы добавить параметры URL, и вам не нужны запросы на публикацию, если вы не предоставите тело.

...