【问题标题】:Angular 2 Http Post with Promise failing, not sending dataAngular 2 Http Post with Promise 失败,不发送数据
【发布时间】:2017-04-27 16:55:37
【问题描述】:

我正在尝试使用 angular 2 进行 http.post 调用。我已经在邮递员中测试了调用,所以我知道 api 正在工作。我收到一个错误,输入为空,这意味着它没有获取数据。我已经阅读了一些答案和文章,但无法使用数据成功调用。

谁能告诉我我所缺少的东西?

public upload(name: string, data: any, result, contentType: string) : Promise<Response> {

        let headers = new Headers({ 'Content-Type': contentType });

        let options = new RequestOptions({ headers: headers });

        return this.http
            .post(this.urlAPI, data, options)
            .toPromise()
            .then(this.extractData)
            .catch(this.handleError);
    }

    extractData(res:Response) {
        console.log('res: ', res);
        let body = res.json();
        return Promise.resolve(res);
    }


    handleError(err: any): Promise<any> {
        console.error('An Error has occured: ', err);
        return Promise.reject(err);
    }

【问题讨论】:

    标签: angular2-http


    【解决方案1】:

    我不确定您的“数据”是什么类型。数据必须在发送前进行字符串化。下面是一个适合我的版本。

    saveNote(note: ApprovalNoteModel): Observable<ApprovalNoteModel> {
        let body = JSON.stringify(note);
        let headers = this.utilsSvc.getAuthHeaders();
        headers.set('Content-Type', 'application/json');
    
        return this.http.post('cloud/api/approval/note', body,
            { headers: headers }
        ).map(response => response.json());
    }
    

    如果它是一个文件,那么你不能通过'http'来做到这一点,我相信。这是我的可行版本。

    addFileRequest(referenceId: number, licenseId: number, url: string, files: File[]): Observable<any> {
        return Observable.create(observer => {
            this.progressObserver = observer;
            let formData: FormData = new FormData(),
                xhr: XMLHttpRequest = new XMLHttpRequest();
    
            formData.append('referenceId', referenceId);
            formData.append('licenseId', licenseId);
            for (let i = 0; i < files.length; i++) {
                formData.append("uploads[]", files[i], files[i].name);
            }
    
            xhr.onreadystatechange = () => {
                if (xhr.readyState === 4) {
                    if (xhr.status === 200) {
                        observer.next(xhr.response);
                        observer.complete();
                    } else {
                        if (xhr.response.status)
                            observer.error(xhr.response);
                        else
                            observer.error({ 'status': xhr.status, '_body': xhr.response });
                    }
                }
            };
    
            xhr.upload.onprogress = (event) => {
                this.progress = Math.round(event.loaded / event.total * 100);
                this.progressObserver.next(this.progress);
            };
    
            xhr.open('POST', url, true);
            xhr.setRequestHeader('Authorization', this.utilsSvc.getToken());
            xhr.send(formData);
        });
    }
    

    【讨论】:

    • 感谢您的回复。数据是结果是一个文件,数据是文件的字节数据。我做了 JSON.stringify() 数据并得到了相同的"{"error":"input empty"}" 错误。我试图对结果文件进行字符串化并得到相同的结果。我还有什么遗漏的吗?
    • 谢谢,我尝试了类似的代码,但它没有发布到网址。
    • 这段代码来自我的项目,运行良好。如果需要,您可以参考并自行更改。
    • 谢谢!我查看了您的代码和其他一些代码,得到了我的期望。谢谢!
    猜你喜欢
    • 2017-12-19
    • 2017-05-16
    • 2019-09-15
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    相关资源
    最近更新 更多