Angular 2 GET参数保持为空

时间:2017-04-04 14:10:32

标签: angular typescript

您好我想在GET请求中发送参数但我的搜索参数仍为空,这是我的代码:

        private jwt2() {
        let currentUser = JSON.parse(localStorage.getItem('currentUser'));
        console.log('current.token ' + currentUser.token);

        let params: URLSearchParams = new URLSearchParams();        //PARAMS
        params.set('pageSize', '6');            //pageSize

        let headers = new Headers({ 'Authorization': currentUser });
        console.log("params: " + params);    //here I can see correct params

        return new RequestOptions({ headers: headers, search: params });
        //  }
    }

我可以在chrome中看到正确的标题但不是搜索参数:

search
URLSearchParams
paramsMap
Map(0)
size(0)
__proto__
Map
[[Entries]]
Array(0)
length(0)

如果我没有设置params并手动将param写入搜索选项,如下所示: return new RequestOptions({ headers: headers, search: 'pageSize=6' }); 它的工作原理

4 个答案:

答案 0 :(得分:10)

我遇到同样的问题,因为我没有导入URLSearchParams。

import { URLSearchParams } from '@angular/http';

如果没有明确导入URLSearchParams,它正在编译,但参数请求是空的。

另请注意,不推荐使用RequestOptions属性搜索,您应该使用参数

RequestOptions({ headers: headers, params : myParams })

取代

RequestOptions({ headers: headers, search : params })

使用 params.toString()的解决方案是一个很好的解决方法,因为RequestOptionsArgs也可以是字符串或URLSearchParams:

export interface RequestOptionsArgs {
    url?: string | null;
    method?: string | RequestMethod | null;
    /** @deprecated from 4.0.0. Use params instead. */
    search?: string | URLSearchParams | {
        [key: string]: any | any[];
    } | null;
    params?: string | URLSearchParams | {
        [key: string]: any | any[];
    } | null;
    headers?: Headers | null;
    body?: any;
    withCredentials?: boolean | null;
    responseType?: ResponseContentType | null;
}

通过传递字符串来避免这个问题。在这种情况下,没有必要使用URLSearchParams。

答案 1 :(得分:1)

尝试检索函数外部的数据,这样当组件加载时,它将在调用private get currentUser(): string { return localStorage.getItem('currentUser'); } 之前存在。

设置LocalStorageData的功能

myCurrentUser = JSON.parse(this. currentUser);

检索数据

private setDefaultPaymentMethod(payid: string) {
        const params: URLSearchParams = new URLSearchParams();
        params.set('currentUser', this.myCurrentUser);
        return this.http.get('Path/URL/End?point'
            { search: params })
            .map((res: Response) => res.json())
            .subscribe((res) => {
                console.log(res);
            });
    }

获取请求

.format()

答案 2 :(得分:1)

问题在于:

RequestOptions({ headers: headers, search: params });

因为如果我使用像这样的字符串

RequestOptions({ headers: headers, search: 'pageSize=6' });

它有效并且在chrome中我看到了这个RequestOptions:

{"method":null,"headers":{"Authorization":["Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJkYW5pZWxlIiwiaXAiOiI3OS4xLjMzLjEzOCIsImV4cCI6MTQ5MTM4MDIyMn0.Z9Y2l7-VDE_Rd8jEqhZ2Sdpx-is5nBeRamtkYrRtt_4oGWXomkhg6-ig87BL0PI5kL11sLf24lpytK8YDeiWMQ"]},"body":null,"url":null,"params":{"rawParams":"pageSize=6","queryEncoder":{},"paramsMap":{}},"withCredentials":null,"responseType":null}

如果我使用params,我的rawParams仍然是空的

答案 3 :(得分:1)

尝试使用 params.toString()

const params: URLSearchParams = new URLSearchParams();
params.set('_language', this.translate.currentLang);

return new RequestOptions({headers: headers, params: params.toString()});