您好我想在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' });
它的工作原理
答案 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()});