从错误的 JSON 格式服务获取响应.如何使其以所需的格式响应?



我正在尝试在我的应用程序中创建一个搜索模块,但我的数据库的响应采用以下格式,并且出现错误

ERROR SyntaxError: Unexpected token s in JSON at position 0
sa[{"id":"4","worklocation":"Hyderabad","firstname":"Sanjay","lastname":"Tutuki","gender":"Male","aadharno":"0","panno":"2147483647","employeetype":"asdasd","dateofbirth":"2017-07-12","city":"Mumbai"}]

如何在没有我搜索的术语的情况下让它响应?或者如何在没有错误的情况下获取组件中的值。

这是我的代码:

service.ts:

search(terms: Observable<string>) {
return terms.debounceTime(400)
.distinctUntilChanged()
.switchMap(term => this.searchEntries(term));
}
searchEntries(term) {
const baseUrl="http://localhost/Angular/search.php?search="
return this.http
.get(baseUrl + term)
.map(res => res.json());
}

元件:

export class EmployeeDirectory { 
data : Data[];
searchTerm$ = new Subject<string>();
constructor(private dataservice : DataService){
this.dataservice.search(this.searchTerm$)
.subscribe(data => {
this.data = data.data;
console.log(data);
});
}
search(searchTerm$){
this.dataservice.search(this.searchTerm$)
.subscribe(data => {
this.data = data.data;
console.log(data);
});
}
}

模板:

<div class="col-md-6 col-sm-12 col-xs-12 ">
<form method="GET" name="form" autocomplete="off">
<div class="col-lg-9">
<div class="input-group">
<input type="text" class="form-control" (keyup)="searchTerm$.next($event.target.value)"  placeholder="Search for...">
<span class="input-group-btn">
<button class="btn btn-secondary" type="button" (click)="search(this.searchTerm$)" ><i class="glyphicon glyphicon-search"></i></button>
</span>
</div>
</div>
</form>
</div>

<div *ngIf="data">
<table *ngFor="let employee of data">
<tr><td>First Name: </td><td>{{employee.firstname}}</td></tr>
</table>

PHP 文件 :

<?php 
header("Allow-Access-Header-Origin: *");
$servername ="localhost";
$username ="root";
$password="sandeepchetikam";
$dbase = "mydb";
$conn = mysqli_connect($servername,$username,$password,$dbase);
if(!$conn){
echo "Error" .mysqli_error($conn);
}
$name =$_GET['search'];
print_r($name);
$sql = "SELECT * FROM newdb WHERE firstname LIKE '%{$name}%' ";
$result = mysqli_query($conn,$sql);
while ($row = mysqli_fetch_assoc($result))
{
$rows[] = $row;
}
echo json_encode($rows);
?>

而且该函数仅响应第一个搜索键,不适用于其他搜索项。谁能帮我解决这个问题?

print_r($name);

看起来有点可疑

从代码中删除print_r($name);

。 首先打印数据,所以这也是响应数据,最后一个回显 JSON 数据也是响应数据,因此正确的响应数据会发生变化。 如果您编写 HTML 代码或在文件中回显或打印数据,这一点更为重要,然后它将作为响应发送。

所以你的总代码将是

<?php 
header("Allow-Access-Header-Origin: *");
$servername ="localhost";
$username ="root";
$password="sandeepchetikam";
$dbase = "mydb";
$conn = mysqli_connect($servername,$username,$password,$dbase);
if(!$conn){
echo "Error" .mysqli_error($conn);
}
$name =$_GET['search'];
$sql = "SELECT * FROM newdb WHERE firstname LIKE '%{$name}%' ";
$result = mysqli_query($conn,$sql);
while ($row = mysqli_fetch_assoc($result))
{
$rows[] = $row;
}
echo json_encode($rows);
?>

希望对您有所帮助

最新更新