【问题标题】:Assign XML from http request to an array将来自 http 请求的 XML 分配给数组
【发布时间】:2020-05-25 20:10:24
【问题描述】:

希望您能帮助有需要的学校老师! 我正在向我们学校的数据库发出 HTTP 请求,它以 XML 形式返回数据。我希望将这些数据存储在一个数组中,以便我可以在 Angular 应用程序中显示每个学生的信息。 我的 students-list.component.ts 中的代码是:

import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';

declare var require: any; // this prevents the require error for rxjs

@Component({
  selector: 'students-list',
  template: `
    <nav-bar></nav-bar>
    <h1>Students</h1>
    <hr/>
    <student-thumbnail [student] = "students"></student-thumbnail>
  `,
  styleUrls: ['./students-list.component.css'],
})
export class StudentsListComponent implements OnInit {
  constructor(private http: HttpClient) {}
  students = [1, 2, 3];

  url =
    'https://'our site';

  xmlBody = `<?xml version="1.0" encoding="utf-8" ?><Filters><MethodsToRun><Method>Pupil_GetCurrentPupils</Method></MethodsToRun></Filters>`;

  ngOnInit() {
    this.http
      .post(this.url, this.xmlBody, { responseType: 'text', observe: 'body' })
      .subscribe((findings) => {
        const xml2js = require('xml2js');

        xml2js.parseString(findings, function (err, result) {
          if (err) {
            console.log(err);
          }
          console.log(result.iSAMS.PupilManager[0].CurrentPupils[0].Pupil);
        });
      });
  }
}
在控制台中,我得到以下信息,并希望将其存储在学生数组中,以便能够向员工显示数据(姓名、电子邮件地址等)。我尝试在 ngOnInit 方法中分配给 this.students 变量,但这不起作用。有人可以帮我完成这个过程吗?

【问题讨论】:

  • 你希望数组是怎样的?您已经在控制台中有一个数组。
  • @AakashGarg 是的,但是当我尝试将其分配给变量时,它返回未定义,例如this.students = result.iSAMS.PupilManger[0].CurrentPupils[0].Pupil 我做错了什么?
  • 试试下面的解决方案。

标签: angular


【解决方案1】:

将代码更改为:-

ngOnInit() {
    this.http
      .post(this.url, this.xmlBody, { responseType: 'text', observe: 'body' })
      .subscribe((findings) => {
        const xml2js = require('xml2js');

        xml2js.parseString(findings, (err, result) => {
          if (err) {
            console.log(err);
          }
          this.students = result.iSAMS.PupilManager[0].CurrentPupils[0].Pupil;
        });
      });
  }

关于词法作用域,需要使用箭头函数而不是普通的回调函数。

【讨论】:

  • 非常感谢;我很困惑为什么这对我不起作用。我在评论中做错了什么?
  • 应该使用箭头函数而不是普通函数。词法作用域是不同的。我将 xml2js.parseString 回调替换为箭头函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多