2017-04-04 35 views
1

嗨,我想一個GET請求中發送的參數,但我的搜索參數仍然是空的,這是我的代碼:角2個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中看到正確的頭而不是搜索PARAMS :

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

如果我不設置PARAMS和手動write參數爲這樣的搜索選項: return new RequestOptions({ headers: headers, search: 'pageSize=6' }); 它的工作原理

回答

1

嘗試檢索該函數以外的數據,以便在調用Get Request之前加載該組件。

功能設置LocalStorageData

private get currentUser(): string { 
     return localStorage.getItem('currentUser'); 
    } 

檢索數據

myCurrentUser = JSON.parse(this. currentUser); 

Get請求

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); 
      }); 
    } 
+0

我的問題不是currentuser,我的問題是pageSize param沒有傳入RequestOptions,所以get請求看不到正確的參數 – Alessandro

+0

頁面大小param應該是沒有'6'所以這相反6如果沒有''換句話說,它應該是一個整數,無論​​它結束了,但它是字符串? – wuno

+0

我不認爲這是set聲明'set(name:string,value:string):void;' – Alessandro

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仍爲空

+0

那麼這不會回答你的問題......你只是進一步闡述你的問題。答案應該提供實際的解決方案:) – Alex

+0

好吧,我必須編輯我的問題,包括這個答案? – Alessandro

+0

那麼,*這是一個答案?從我看到的情況來看,這不是一個答案?你的參數仍然是空的?也許我很困惑:D – Alex

1

嘗試使用params.toString()

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

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

我遇到同樣的問題,因爲我沒有導入URLSearchParams。

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

沒有明確導入URLSearchParams它很好,但參數請求是空的。

還要注意RequestOptions財產搜索已過時,您應該使用PARAMS

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。