Проблемы с Angular 5 POST - отправка данных в виде единственного значения [дубликат]

setBorder(null);

просто установите нулевую границу для jpanel, которую вы используете, и используйте любой макет, который вам нравится.

40
задан Елин Й. 23 August 2017 в 07:35
поделиться

4 ответа

Вы можете сделать это, используя URLSearchParams, поскольку тело запроса и угловой автоматически настроит тип содержимого на application/x-www-form-urlencoded и правильно закодирует тело.

let body = new URLSearchParams();
body.set('username', username);
body.set('password', password);

this.http.post(this.loginUrl, body).map(...);

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

Вам нужно закодировать тело следующим образом:

let body = `username=${username}&password=${password}`;

Вам нужно установить параметры заголовка следующим образом:

this.http.post(this.loginUrl, body, { headers: headers }).map(...);
54
ответ дан Brad 17 August 2018 в 10:38
поделиться
  • 1
    Пробовал параметр URLSearchParams (), который не работал, но вы абсолютно правы в отношении формата тела. Это сделал трюк. Отмечено как ответ, и я собираюсь обновить сообщение для других людей, чтобы найти. – Damon Kaswell 5 October 2016 в 17:02
  • 2
    Я использую URLSearchParams как тело для данных формы и не имею проблем. Я думаю, что это было введено в RC4. Какую версию углового вы используете? – Brad 5 October 2016 в 22:13
  • 3
    Финал, но оглядываясь назад, я уверен, что я просто опечатал его, и, поскольку второй вариант работал, я не стал повторять попытку. Еще раз спасибо за помощь, кстати. – Damon Kaswell 5 October 2016 в 22:38
  • 4
    @DamonKaswell Нет успеха с использованием URLSearchParams как тела, для меня тоже. Если я делаю это, тип контента - application / json, а опубликованные json-данные - пустой объект. Я нахожусь в Angular 4.0. Я закончил работу с этим `const headers = new Headers ({'Content-Type': 'application / x-www-form-urlencoded'}); const options = new RequestOptions ({заголовки: заголовки}); const body: URLSearchParams = новый URLSearchParams (); body.set («имя пользователя», имя пользователя); body.set («пароль», пароль); return this.http.post (API_URL + 'login', body.toString (), options) ` – joensson 28 April 2017 в 23:04
  • 5
    Если вы создаете строку тела вручную, не забудьте закодировать свое имя пользователя и пароль, иначе определенные символы не будут переданы на сервер правильно ... – Dawson Toth 15 November 2017 в 06:57

Для тех, кто все еще ищет ответ, я решил это с помощью Angular 5 и HttpClient:

const formData = new FormData();

// append your data
formData.append('myKey1', 'some value 1');
formData.append('myKey1', 'some value 2');
formData.append('myKey3', true);

this.httpClient.post('apiPath', formData);

НЕ устанавливайте заголовок Content-Type, угловые исправят это для вас!

18
ответ дан Johan Kvint 17 August 2018 в 10:38
поделиться
  • 1
    Ницца! Благодарим вас за решение Angular 5 HttpClient. Я переносил свой проект на Angular 5 и изучал упрощение процесса публикации. – Damon Kaswell 30 November 2017 в 17:19
  • 2
    должен быть принятым ответом – Xan 1 December 2017 в 16:40
  • 3
    Мне нужно включить Authorization в заголовок, установить его на formData или установить его в RequestOptions? – stt106 23 December 2017 в 23:11
  • 4
    как добавить объект в объект? ex: option {details: {name: xx, age: yy}} – saghar.fadaei 16 May 2018 в 09:34
  • 5
    @ saghar.fadaei не уверен, но, может быть, это может помочь: gist.github.com/ghinda/8442a57f22099bdb2e34 – Johan Kvint 17 May 2018 в 10:57

Для Angular 4.3 + / 5 + (New HTTPClient) используйте следующее:

let body = new URLSearchParams();
body.set('user', username);
body.set('password', password);

let options = {
    headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded')
};

this.http
    .post('//yourUrl.com/login', body.toString(), options)
    .subscribe(response => {
        //...
    });

Обратите внимание на 3 вещи, чтобы заставить его работать как ожидалось:

  1. Использовать URLSearchParams для вашего тела
  2. Преобразовать тело в строку
  3. Установить тип содержимого заголовка

Внимание: старым браузерам нужна полифония! Я использовал: npm i url-search-params-polyfill --save, а затем добавил к polyfills.ts: import 'url-search-params-polyfill';

50
ответ дан Mick 17 August 2018 в 10:38
поделиться
  • 1
    Спасибо, что добавили это как ответ. – Damon Kaswell 1 September 2017 в 19:36
  • 2
    Спас мой день! Спасибо! – Daniel Kmak 26 September 2017 в 20:11
  • 3
    Парни смотрят, что вам нужен полиполк! Я добавил его к ответу. – Mick 27 September 2017 в 10:31
  • 4
    Ух, угловатый. Это безумие, что нам нужно написать такой подробный шаблонный код, чтобы сделать такую ​​простую вещь. – goat 2 November 2017 в 23:03
  • 5
    Не следует использовать "новые" Угловой 5 HttpParams вместо "старого" URLSearchParams? – superjos 16 February 2018 в 18:04
  • 6
    – Wolfgang Stengel 12 May 2018 в 23:32

Добавление из Brad, тела, которое вам нужно будет вызвать body.toString () и поместить его как тело запроса.

2
ответ дан srlgrg 17 August 2018 в 10:38
поделиться
  • 1
    Вероятно, это должен быть комментарий к ответу Брэда, а не отдельный ответ. – peacetype 13 January 2018 в 23:09
Другие вопросы по тегам:

Похожие вопросы: