我正在学习 Angular 2,我做了一个连接到数据库的测试,但是我得到一个错误:SyntaxError: unexpected token < in JSON at position 0.
所以我的 xampp 在端口 80 或 443 上工作。 我测试的 url(我使用的是 angular cli)是: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 调用,但第一次使用 angular。也许是港口?还是我缺少的其他东西?
最好的问候
最佳答案
所以既然是跨域的情况就是用两个端口。在您的通话中使用带有端口的完整网址: http://localhost:80/yourproject/public/getContacts.php
并在您的服务器端在输出之前添加 CORS header :
header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Headers: X-Requested-With');
header('Content-Type: application/json');
echo json_encode($result);
因为我只是在测试,所以我使用了 *,但不推荐这样做。通常允许一个特定的 url。
关于javascript - angular 2 服务不调用 php 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38543560/