2017-07-20 13 views
0

こんにちは皆、私はPHPスクリプトによって返されたオブジェクトjsonをフェッチするのに問題があります。angular2、PHP with mysql

サーバがオブジェクトjsonを返すとオブジェクトが角度をつけて回復すると、このエラーが発生します。コードからjson convertion res.json()を削除すると、このエラーは消えて、サーバーの応答は空になります。

ERROR SyntaxError: Unexpected token in JSON at position 0 
at Object.parse (<anonymous>) 
at Response.webpackJsonp.../../../http/@angular/http.es5.js.Body.json (http.es5.js:797) 
at SafeSubscriber._next (list-alunos.component.ts:14) 
at SafeSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.SafeSubscriber.__tryOrUnsub (Subscriber.js:238) 
at SafeSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.SafeSubscriber.next (Subscriber.js:185) 
at Subscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber._next (Subscriber.js:125) 
at Subscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber.next (Subscriber.js:89) 
at XMLHttpRequest.onLoad (http.es5.js:1226) 
at ZoneDelegate.webpackJsonp.../../../../zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:424) 
at Object.onInvokeTask (core.es5.js:3881) 

私は情報と、このサービスを使用するコンポーネントを復旧サービスをしました:

import { Injectable } from '@angular/core'; 

import { Http, Response } from '@angular/http'; 
import { Observable } from 'rxjs/Rx'; 
import 'rxjs/Rx'; 

@Injectable() 
export class ApiHttpDaoService { 

    constructor(private http: Http) { } 

    public getListStudents() { 
     return this.http.get("http://localhost/obtener_alunos.php"); 
    } 
} 

これはコンポーネントです:

import { Component, OnInit } from '@angular/core'; 
import { ApiHttpDaoService } from '../../services/api-http-dao.service'; 

@Component({ 
    selector: 'app-list-alunos', 
    templateUrl: './list-alunos.component.html', 
    styleUrls: ['./list-alunos.component.css'] 
}) 
export class ListAlunosComponent implements OnInit { 

    constructor(private service: ApiHttpDaoService) { 
     this.service.getListStudents().subscribe(
      res => console.log(res.json()) 
     ); 
    } 

    ngOnInit() { } 
} 

そして、これはそのPHPファイルですjsonオブジェクトを返す:

<?php 
    header('Access-Control-Allow-Origin: *'); 
    header('Content-Type: application/json'); 

    require("conectar_mysql.php"); 

    $vec_res = array(); 
    $result = mysqli_query($conn, "SELECT * FROM alunos"); 

    if (mysqli_num_rows($result) > 0) { 
     while ($row = mysqli_fetch_assoc($result)) { 
      array_push($vec_res, array('nome' => $row['nome'], 'idade' => 
      $row['idade'], 'morada' => $row['morada'])); 
     } 
     echo json_encode($vec_res); 
    } 

    mysqli_close($conn); 
?> 

ありがとうございました

+0

だけでなく、あなたのネットワーク]タブに表示何をすべきか、実際に何が受信されていますか?少なくともあなたはJSONを受け取っていません。 PS。 PHPスクリプトの 'else'も有効なjsonを返さないので、実際に受け取っているのでしょうか?応答は有効なjsonではないため、 – Alex

+0

です。 –

+0

まあ**あなたは実際に何を受け取りますか?私は、あなたのネットワークタブをチェックし、私たちに教えてください。あなたのphpスクリプトが 'else'に行くとJSONが返されません:' echo "0 results"; 'あなたが編集した;) – Alex

答えて

1

Content-typeヘッダーを2回設定しています。 Uはウルの要求をマップ必要、header('Content-Type: text/html; charset=utf-8');

+0

ありがとうございます。コードからその行を削除しましたが、エラーが続きます –

+0

プレビューのネットワークに何も表示されません –

-1

を秒1を取り除く:

public getListStudents() { 
    return this.http.get("http://localhost/obtener_alunos.php") 
     .map(res => {return res;}) 
} 
+0

map(res => return res)はno opです –

+0

"op"とは何ですか?私は私のプロジェクトでこれを使用し、すべての作品は良いです – FierceDev

+0

操作はありません。この場合、マップ関数は何もしません。 –