我已经看到这个问题在 Angular 2 中相当普遍,但我没有看到任何对我的特殊情况有帮助的东西。
具体来说,我正在创建一个从 API(需要 API 密钥)中提取数据的应用程序,其中的结果专门采用 XML 格式。我要做的是在用户输入搜索参数时调用 API,让 API 返回结果,然后最终在同一屏幕上显示结果。
但是,我一直遇到相同的“Unexpected token <”错误,错误的来源是 API 本身的 URL。我怀疑问题出在我试图将正文作为 JSON 返回的事实,但我以前从未遇到过这个问题,所以我希望社区能提供帮助!
下面是我的服务和组件代码:
搜索栏.component.ts
import { Component, Output, Input, EventEmitter } from '@angular/core';
import { NgForm } from '@angular/forms';
import { NgModel } from '@angular/forms';
import { Observable } from 'rxjs/Observable';
import { Search } from './search';
import { ZillowSearchService } from './zillow-search.service';
@Component({
moduleId: module.id,
selector: 'search-bar',
templateUrl: `search-bar.component.html`,
styles: [
`input {
width: 50%;
margin-left: 25%;
margin-top: 15%;
color: black;
height: 40px;
}
button {
border-radius: 5px;
margin-top: 5%;
margin-left: 45%;
}
`
]
})
export class SearchBarComponent {
getSearchResults: string;
model = new Search("");
constructor( private zillowSearchService: ZillowSearchService) {}
private sub: any;
public state: string = "" ;
data: string;
onSubmit(){
this.zillowSearchService.searchZillow("New Mexico")
.subscribe(
data => console.log(data),
error => console.log("Error: " + error)
);
}
}
zillow-search.service.ts:
import { Inject, Injectable } from '@angular/core';
import { Http, Headers, Response, Jsonp } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import '../rxjs-operators';
import { AppConfig } from './app-config';
import { Search } from './search';
let api = AppConfig.baseUrls.api;
let url = AppConfig.baseUrls.base;
@Injectable()
export class ZillowSearchService {
public state: string;
constructor ( @Inject(Jsonp) private jsonp: Jsonp) {
//this.http = http;
}
protected results: any;
searchZillow(statevar: any) {
console.log("Before" + statevar);
var queryString = url + `?zws-id=${api}&state=${statevar}&callback=JSONP_CALLBACK`;
return this.jsonp
.get(queryString, new Headers({ "Content-type":
"application/xml", "Accept": "application/xml",
"Access-Control-Allow-Origin": "*" }))
.map((res: Response) => res.json())
//.map(res => console.log("TEST"));
//.map((res) => {
//return
//});;
}
}
对于一些额外的细节,查看控制台和网络,我可以看到“类型”被列为脚本,发起者是 http.umd.js,它指向 BrowserJsonp.send(如果这有助于提供任何上下文全部)。
如果您希望我包含任何其他代码片段,请告诉我,我非常感谢您的帮助和指导!