Angular 4 - http.post不接收对象列表

时间:2017-11-09 00:35:16

标签: json angular http ionic3

我想创建一个http.post请求,以使用.subscribe从PHP接收对象列表。 当我这样做时,我收到的东西就像一个包含我的物品的字符串。 但在* ngFor循环中,控制台告诉我列表是一个未定义的变量。 这是我的代码:

列表master.ts

  /////
  objet01 = {ville: 'Bordeaux', prix: '69€'};
  objet02 = {ville: 'Lille', prix: '45€'};
  objs = [this.objet01, this.objet02];
  /////

  tempproj;


  constructor(public navCtrl: NavController, private navParams: NavParams, public http: Http) {

    this.http = http;

    this.getprojets();

  }

  getprojets() {
    var link = 'http://*****/getprojets.php';
    var myData = JSON.stringify({value: 'true'});

    this.http.post(link, myData)
    .subscribe(data => {
    this.tempproj = data["_body"]; 
    console.log('OKOK ' + this.tempproj + ' OKOK');
    }, error => {
    console.log("Oooops!");
    });

  }

这是getprojets.php:

$postdata = file_get_contents("php://input");
    if (isset($postdata)) {
        $request = json_decode($postdata);
        $value = $request->value;

        if ($value === 'true' ) {
            $bdd = new PDO('***', '***', '***', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
            $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

            $query = $bdd->prepare("SELECT * FROM projetsapparts") or die('Login invalide');
            $query->execute();
            $liste = array();
            class projet1 {};


 while ($projet = $query->fetch()) {
            $projet1 = new projet1;
            $projet1->ville = $projet['ville'];
            $projet1->photo = $projet['photo'];
            $liste[] = $projet1;
        }
        echo json_encode($liste);
    }
}
else {
    echo 'Erreur postdata';
}

然后,list-master.html:

  <ion-slides class="marketslide" autoplay="3000" loop="true">
    <ion-slide *ngFor="let appart of tempproj">
      <ion-card (tap)="showplvdetails()">
        <img src="{{appart.photo}}">
        <div class="card-title">{{appart.ville}}</div>
      </ion-card>
    </ion-slide>
  </ion-slides> 

在控制台中,var tempproj包含3个条目,它看起来像一个对象列表: [{ “威乐”: “兰斯”, “照片”: “HTTP:****** JPG”},{ “威乐”: “巴黎”, “照片”:“HTTP:****** .JPG “},{” 威乐 “:” 阿姆斯特丹”, “照片”: “HTTP:****** JPG”}]

但是,我有这个错误: 无法读取未定义的属性'hasAttribute'

在.html文件中,我用* ngFor中的var objs(在.ts文件中设置而不是来自PHP)替换var tempproj,一切正常。

为什么PHP中的对象列表未定义? 在* ngFor =“let appart of tempproj”行中,'appart'可以是一个对象吗? 请帮助我,我只找到JavaScript和Angular 2的解决方案。我在5天之后就开始了......大声笑

1 个答案:

答案 0 :(得分:1)

此处的问题是您的tempproj对象在模板呈现时未定义。

也许您可以尝试将其初始化为空数组

let tempproj: Array<any> = [];

constructor(public navCtrl: NavController, private navParams: NavParams, public http: Http) {

    ....