Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Typescript中可观察的XMLHttpRequest_Typescript_Angular_Xmlhttprequest - Fatal编程技术网

在Typescript中可观察的XMLHttpRequest

在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

当我试图管理为上传文件而进行的XMLHttpRequest调用的结果时,我遇到了tslint问题。以下是我在互联网上找到的当前方法:

// 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);
    });
}