我需要使用HttpClient
ofAngular 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","prId":"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, or JSON.stringify()
or .append()
。
我在使用 和 的方法后发布了一个问题JSON.stringify()
,如您所见,存在错误。即使多维数组包含 0行或多行数据,echo count($array)
也总是1
如此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:string '[{"legalId":"","protectionId":"","situationId":"","addDate":"2018-09-14 "},{"legalId":"","protectionId":"","situationId":"","addDate":"2018-09-14"}]' (length=147)
但是没有向数据库添加任何内容。
请注意,PHP 脚本与之前未答复的帖子相同
我找到了解决方案。
是的,HttpClient()
接受一个数组作为HttpParams()
.
对于 Angular 脚本,我执行了以下操作:
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)
.set('arrayOfActualities', arrayOfActualities);
正如HttpParams()
文档中提到的,.set()
将该值作为一个字符串,即使在使用json_encode()
.
所以解决方案是追加到arrayOfActualities
数组中:
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)
.set('arrayOfActualities', arrayOfActualities);
httpParam.append('arrayOfActualities', JSON.stringify(arrayOfActualities));
在 PHP 方面,我需要使用json_decode($arr, true)
, 以便让服务器脚本遍历数组,因为遍历 json 数组给我带来了问题,因为它无法读取字段标题,因为双引号:
$arr = json_decode($arrayOfActualities, true);
if(count($arr)>0)
{
foreach($arr as $array)
{
}
}
...
正如@B.Fleming 所说:
您的 PHP 脚本正在调用 json_encode(),它会生成一个 JSON 字符串。如果您的意图是将 JSON 转换为数组,请执行 json_decode()。但是,在任何事情之前,请确保您传递给 json_decode() 的任何内容都不是数组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句