2016-07-23 3 views
1

Я учусь угловыми 2 и я сделать тест для подключения к базе данных, но я получаю сообщение об ошибке: SyntaxError: неожиданный лексем < в формате JSON в положении 0.угловой 2 службы не вызывая PHP файл

поэтому у меня есть xampp, работающий на порту 80 или 443. URL моего теста (я использую угловой кли): localhost: 4200

это моя попытка. У меня есть услуга по этому методу:

getUsers(){ 
return this._http.get('getusers.php') 
    .map(res => res.json()); 
} 

Файл getusers.php находится в общей папке. это содержание. очень простой только, чтобы получить некоторые результаты и отправить их обратно в JSON:

// set up the connection variables 
    $db_name = 'mydb'; 
    $hostname = 'localhost'; 
    $username = 'myusername'; 
    $password = 'mypass'; 

    // connect to the database 
    $dbh = new PDO("mysql:host=$hostname;dbname=$db_name", $username, $password); 


    $sql = 'SELECT * FROM users'; 


    $stmt = $dbh->prepare($sql); 


    $stmt->execute(); 


    $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 


    $json = json_encode($result); 

    echo $json; 

так я добавить, что в компоненте я импортировать службу, инициализировать его в конструкторе и подписаться:

constructor(private _usersService: UsersService) {} 

    ngOnInit() { 
    this._usersService.getUsers() 
     .subscribe(
     data => this.getUsers = JSON.stringify(data), 
     error => alert(error), 
     () => console.log("Finihed") 
    ); 
    } 

Что я Я здесь отсутствует. Я делаю тонны вызова ajax, но первый раз с угловым. может, это порты? или что-то еще мне не хватает?

наилучшими пожеланиями

+0

Это _ "SyntaxError: неожиданный токен <в JSON" _ может означать, что ваш php с ошибкой. Убедитесь, что у вас есть полностью работающий php-код. (вы можете использовать расширение POSTMAN chrome для некоторых необычных запросов) – FirstOne

+0

Поскольку вы ничего не отправляете, откройте «getusers.php» из браузера. Что ты видишь? – FirstOne

+0

Я знаю. первое, что я сделал, это проверить файл initself, сделать var_dump и получить данные – Ron

ответ

1

так, поскольку ситуация является кросс домен с двумя портами. в вызове использовать полный URL с портом: http://localhost:80/yourproject/public/getContacts.php

и в вашей стороне сервера добавить заголовки CORS перед выводом:

header("Access-Control-Allow-Origin: *"); 
header('Access-Control-Allow-Headers: X-Requested-With'); 
header('Content-Type: application/json'); 

echo json_encode($result); 

, так я просто тестирование я использую *, но это не рекомендуемые. usuall позволяет использовать определенный URL-адрес.

0

Вы должны подписаться на Аякса вызов на работу; Кто никогда не звонит метод getUsers должен подписаться на него:

getUsers(){ 
    return this._http.get('getusers.php') 
    .map(res => res.json()); 
} 

Допустим, вы вызываете метод получить здесь:

myOtherFunction(){ 
    this.getUsers.subscribe((response)=>{ 
      console.log('response',response); 

    }) 

} 
+0

эй, извините, я забыл добавить это. в моем компоненте я импортировать службу, а затем это: 'ngOnInit() { this._usersService.getUsers() .subscribe ( данных => this.getUsers = JSON.stringify (данные), ошибка => сигнал (ошибка), () => console.log ("Finihed") ); } ' – Ron

Смежные вопросы