我在使用.net核心SPA应用程序时遇到问题。-结果由API调用传回- SPA不处理结果。
下面是相关的代码:
SPA ts:
class TestLibraryItem {
private _apiPath: string;
private _http: HttpClient;
public name: string;
public testResults: TestResult;
constructor(name: string, apiPath: string, http: HttpClient) {
this.name = name;
this._apiPath = apiPath;
this._http = http;
}
RunTests() {
this._http.get<TestResult>(this._apiPath)
.subscribe(result => {
this.testResults = result;
console.log(this.testResults);
console.log(this.testResults.CheckName);
});
}
}
class TestResult {
CheckName: string;
Checks: CheckResult[];
}
class CheckResult {
Test: string;
Pass: boolean;
}
当触发RunTests()时,控制台将产生以下结果:
{"CheckName":"Check One","Checks":[{"Test":"Test one","Pass":true},{"Test":"Test two","Pass":true}]}
undefined
据我所知,我从应用程序接口中得到了有效的json (由console.log将其吐出,但它实际上并没有构建导致未定义的对象。
发布于 2018-08-10 14:49:54
我认为你在JSON中的属性是从大写到小写解析的- CheckName -> checkName
。由于Javascript/Typescript是一种区分大小写的语言,因此您需要使用不同的属性名称。
尝试以小写形式登录,并将您的属性名称更改为以小写开头。在Javascript/Typescript
中,函数和变量/属性名称以小写字母开头是一个常见的标准。
console.log(this.testResults.checkName);
发布于 2018-08-10 14:56:59
由于此console.log(this.testResults)是首先触发的,因此您的定义不明确
RunTests() {
this._http.get<TestResult>(this._apiPath)
.subscribe(result => {
this.testResults = result;
console.log(this.testResults);
console.log(this.testResults.CheckName === undefined ? '' : this.testResults['CheckName']);
});
}
或者使用SetTimeOut
RunTests() {
this._http.get<TestResult>(this._apiPath)
.subscribe(result => {
this.testResults = result;
console.log(this.testResults);
setTimeout(()=>{console.log(this.testResults['CheckName'])},2000);
});
}
发布于 2018-08-10 15:06:16
我遇到了一个类似的问题,即它看起来像lika有效的json响应,但实际上它是一个“文本”响应。试一试以下几点:
getdData(inParams) {
let headers = new HttpHeaders();
headers = headers.append('Content-Type', 'application/json');
// need responseType = text (non object)
return this.http.get(environment.url, {
headers,
responseType: 'text'
});
}
https://stackoverflow.com/questions/51780485
复制相似问题