Мне нужно отправить массив данных, используя HttpClient
из Angular 6
на PHP
сервер.
У меня есть выпадающий список, из которого я выбрал, и вставка в массив:
arrayOfLegalProtection=[];
addSit(){
let l_id = '';
let p_id = '';
let s_id = '';
let add_date = '';
l_id = this.formGroup.controls['l_id'].value;
p_id = this.formGroup.controls['p_id'].value;
s_id = this.formGroup.controls['s_id'].value;
add_date = this.formGroup.controls['add_date'].value;
this.showSubHeader++;
this.arrayOfLegalProtection.push({lId: l_id,
pId: p_id,
sId: s_id,
addDate: add_date})
console.log(this.arrayOfLegalProtection);
}
Результат консоли показывает мне правильные значения:
[{ "LID": "1", "ИУП": "1", "Sid": "2", "addDate": "2018-09-14"},
{ "LID": "", "Pid": "1", "Sid": "5", "addDate": "2018-09-14"},
{ "LID": "", "Pid": "2", "Sid": "", "addDate": "2018-09-20"}]
Теперь мне нужно добавить этот массив к методу httpclient post и отправить его на сервер, но, как сказано в обсуждении этого поста , массивы нельзя отправлять через библиотеку angular HttpClient
.
Нам нужно использовать append, или JSON.stringify()
, или .append()
.
Я опубликовал вопрос после использования метода JSON.stringify()
и, как вы можете видеть, были ошибки. И даже echo count($array)
всегда равен 1
, даже если многомерный массив содержит 0 или N
строк данных.
Итак, я переключился на другой метод, используя .append()
:
saveUnitData(unit_type,
location_type_id, user_id, number_of_hh, unit_status, add_date, arrayOfActualities)
{
console.log(user_id);
let httpParam = new HttpParams().set('unit_type', unit_type)
.set('location_type_id', location_type_id)
.set('user_id', user_id)
.set('number_of_hh', number_of_hh)
.set('unit_status',unit_status)
.set('add_date', add_date);
Object.keys(arrayOfActualities).forEach(key=>{
httpParam = httpParam.append('arrayOfActualities', arrayOfActualities);
})
//.set('arrayOfActualities', arrayOfActualities);
let headerOptions = new HttpHeaders();
headerOptions.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
console.log('h'+arrayOfActualities);
return this.http.post(this.globalVar.UnitSavedataUrl, httpParam, {headers: headerOptions});
}
Используя этот код:
Object.keys(arrayOfActualities).forEach(key=>{
httpParam = httpParam.append('arrayOfActualities', arrayOfActualities);
Я попытался преобразовать объект в массив, используя append, чтобы его можно было отправить через службу httpClient.
В заголовке запроса мы видим обычные отправленные данные, но массив повторяется сотни и сотни раз.
А ответ от сервера всегда:
C: \ wamp64 \ WWW \ DEV \ UnitSaveData.php: 23: строка
«[{ "LegalId": "", "protectionId": "", "situationId": "", "addDate": "2018-09-14"}, { "legalId": "", "protectionId":» », "situationId": "", "addDate": "2018-09-14"}]
(Длина = 147)
Но в базу данных ничего не было добавлено.
Обратите внимание, что скрипт PHP такой же, как и в предыдущем посте без ответа