我一直在用fetch-client敲打太长时间,我需要一些帮助。
我从Skyscanner获取了一些数据。该请求会触及其API,Chrome的开发人员工具会将其列在网络标签中,作为包含代码200和正确响应正文的完整提取请求。
import {inject} from 'aurelia-framework';
import {HttpClient} from 'aurelia-fetch-client';
@inject(HttpClient)
export class Flights {
constructor(http){
http.configure(config => {
config
.withBaseUrl('http://partners.api.skyscanner.net/apiservices/')
.withDefaults({
mode: 'no-cors',
headers: {
'Accept': 'application/json',
'Content-type' : 'application/json'
}
});
});
this.data = "";
this.http = http;
}
activate() {
this.http.fetch('browsequotes/v1.0/GB/GBP/en-GB/UK/anywhere/anytime/anytime?apiKey=MYAPIKEYGOESHERE')
.then(response => {
console.log(response);
console.log(response.response);
console.log(response.content);
console.log(response.data);
})
.catch(ex => {
console.log(ex);
});
}
}
但是当打印响应对象时,它上面没有任何内容:
Response {}
body: null
bodyUsed: false
headers: Headers
__proto__: Headers
ok: false
status: 0
statusText: ""
type: "opaque"
url: ""
__proto__: Response
所有剩余的console.log都生成 undefined
我是否错误地使用了fetch-client?我错过了什么?
答案 0 :(得分:3)
请注意,您已收到opaque response(type: "opaque"
)。不透明的回复不允许您阅读它们。这是由于您之前设置的no-cors
模式。您应该使用cors
模式,SkyScanner应该为您的API密钥提供正确的标头,我认为they don't do。
答案 1 :(得分:0)
我修正了可能属于同一标题的问题,所以在这里留下答案,因为我无法在网上找到任何内容。可能我只是愚蠢但我之前就是这样做......
.then(response => {response.json()})
.then(data => console.log(data))
在一天的时间里把我的头撞了一下,结果证明:
.then(response => response.json())
.then(data => console.log(data))
或者
.then(response => { return response.json()})
.then(data => console.log(data))
简单,与Aurelia或Fetch无关,但对Javascript语法有所了解。