在Typescript中可观察的XMLHttpRequest
当我试图管理为上传文件而进行的XMLHttpRequest调用的结果时,我遇到了tslint问题。以下是我在互联网上找到的当前方法:在Typescript中可观察的XMLHttpRequest,typescript,angular,xmlhttprequest,Typescript,Angular,Xmlhttprequest,当我试图管理为上传文件而进行的XMLHttpRequest调用的结果时,我遇到了tslint问题。以下是我在互联网上找到的当前方法: // Files upload request makeFileRequest(url: string, files: Array<File>) { return new Promise((resolve, reject) => { let formData: any = new FormData() le
// Files upload request
makeFileRequest(url: string, files: Array<File>) {
return new Promise((resolve, reject) => {
let formData: any = new FormData()
let xhr = new XMLHttpRequest()
for(let file of files) {
formData.append("uploads[]", file, file.name)
}
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
resolve(JSON.parse(xhr.response))
} else {
reject(xhr.response)
}
}
}
xhr.open("POST", url, true)
xhr.send(formData)
})
}
但tslint在地图上告诉我:
TS2339 Property 'map' does not exist on type 'Promise<{}>'.
TS2339属性“map”在类型“Promise”上不存在。
因此,我认为最好是管理makeFileRequest函数,使其返回一个可观察的而不是承诺。
为了以防万一,请注意我导入了“rxjs/add/operator/map”
有人知道吗?谢谢
map
是一种可观察的方法,而不是承诺的方法。返回可观察的将修复错误:
makeFileRequest(url: string, files: Array<File>) {
return Observable.fromPromise(new Promise((resolve, reject) => {
let formData: any = new FormData()
let xhr = new XMLHttpRequest()
for (let file of files) {
formData.append("uploads[]", file, file.name)
}
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
resolve(JSON.parse(xhr.response))
} else {
reject(xhr.response)
}
}
}
xhr.open("POST", url, true)
xhr.send(formData)
}));
}
Property 'json' does not exist on type '{}'
不要忘记导入响应
:
import {Response} from '@angular/http';
实现以下目标的简单方法:
xhrCall(url, formData, header) {
return Observable.create(function (observer) {
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
observer.next(xhr);
} else {
observer.error(xhr);
}
}
};
xhr.open("POST", url, true);
xhr.setRequestHeader(header.name, header.value);
xhr.send(formData);
});
}
谢谢,它可以满足我的要求:)现在我仍然有一个问题,在.map行的类型{}
上不存在属性'json',但这是另一个问题:(但这很奇怪,我在其他可观察的映射指令json()中这样做)
是Response中的一个方法,因为通常在http中,Observable返回一个响应对象。我遇到了以下错误:无法在XMLHttpRequest上执行open:无效URL我使用的是angular 2,你能帮我吗?我很确定它不是URL,但我对angular是新手2@MariLuna,不看代码就很难说问题出在哪里好像你的url不正确。@AndreiZhytkevich谢谢你,这就是问题所在,我没有把“http”
xhrCall(url, formData, header) {
return Observable.create(function (observer) {
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
observer.next(xhr);
} else {
observer.error(xhr);
}
}
};
xhr.open("POST", url, true);
xhr.setRequestHeader(header.name, header.value);
xhr.send(formData);
});
}