【问题标题】:Not Receiving Entire JSON Payload in Angular 8在 Angular 8 中未接收到整个 JSON 有效负载
【发布时间】:2019-11-03 12:34:43
【问题描述】:

接收 JSON 负载时,我只接收第一个对象中的值。

在 PHP 方面,一切似乎都很好。我构造了一个基本的两口袋关联数组。在浏览器中,JSON 编码对象似乎是正确的,响应负载(来自浏览器的网络选项卡。)在 JSON 验证器中进行验证。

这是打印到屏幕上的 PHP $info 数组:

(
  [0] => Array
    (
      [id] => 3
      [first] => June
      [last] => Cleaver
    )
  [1] => Array
    (
      [hvp] => 1
      [rd] => 1
      [th] => 1
    )
)

echo json_encode($info, JSON_FORCE_OBJECT);

这是成功验证的 JSON 对象:

[
   {
      "id":"3",
      "first":"June",
      "last":"Cleaver"
   },
   {
      "hvp":"1",
      "rd":"1",
      "th":"1"
   }
]

响应负载(来自浏览器的网络选项卡。):

[{"id":"3","first":"June","last":"Cleaver"},
{"hvp":"1","rd":"1","th":"1"}]

当我通过 Angular API 服务获取负载时,第二个 Object 是空的。

Object(2)
  ​0: Object { id: "3", first: "June", last: "Cleaver" }
  1: Object {}

我期待:

Object(2)
  ​0: Object { id: "3", first: "June", last: "Cleaver" }
  1: Object { hvp: "1", rd: "1", th: "1" }

以下是 Angular 中负责获取 API 数据的两个代码块。第一个在有问题的 component.ts 文件中:

ngOnInit() {
  this.apiService.readPolicies().subscribe((policies:
  Policy[])=>{this.policies = policies;)
  console.log(this.policies);
}

这在 api.service.ts 文件中:

readPolicies():Observable<Policy[{
  return this.httpClient.get<Policy[(`${this.PHP_API_SERVER}
  /read.php`);
}

read.php 文件似乎完全符合预期,所以我没有发布它。

政策.ts

export interface Policy {
  id: number,
  first: string,
  last: string,
  hvp?: string,
  rd?: string,
  th?: string
}

为了说明我的问题,Observable 显然看到了两个对象,但为什么第二个对象中没有键/值对?

【问题讨论】:

    标签: php angular api


    【解决方案1】:

    您的第二个对象缺少 typescript 接口 Policy 中所需的参数。您可能需要将Policy 中的所有 6 个参数设为可选以支持您的用例

    【讨论】:

    • 这应该不会影响 json 解析,因为在运行时不会检查类型。
    【解决方案2】:

    [{"id":"3","first":"June","last":"Cleaver"}, {"hvp":"1","rd":"1","th":"1"}] 映射到具有 2 个对象的数组。应该是:

    {
        "id": "3",
        "first": "June",
        "last": "Cleaver",
        "hvp": "1",
        "rd": "1",
        "th": "1"
    }
    

    这样它匹配你在 ts 中定义的Policy

    【讨论】:

    • 不确定如何解释您的答案,但我希望 JSON 数据是两个对象。即使我没有hvprdth 在 Policy.ts 中,会不会阻止它在控制台中显示?
    【解决方案3】:

    我提供的信息无法解决这个问题,这取决于我。事实证明,即使我的 read.php 脚本做了它应该做的事情,rxjs 并不同意。因此,我以更强大的程序风格重写了脚本,并且成功了。我修改了最初下载的脚本,值得称赞的是它有效,但编程的草率性质并没有发挥作用。 这里的教训:不要马虎。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-01
      • 2014-11-25
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      相关资源
      最近更新 更多