1. 程式人生 > >解決基於angular5開發的ionic3使用http的post訪問ssm框架出現跨域請求失敗的問題

解決基於angular5開發的ionic3使用http的post訪問ssm框架出現跨域請求失敗的問題

  安裝angular的時候已經是6了,實際學習的視訊是angular4的,碰到的坑的確很多,當我學到ionic3的時候,需要通過http的post方式訪問自己編寫的ssm框架的後端時,發現谷歌瀏覽器控制檯報跨域請求被禁止的錯誤。網上所搜了一堆解決辦法,耗時一天半的時間,終於解決了。現在我將詳細解決方案貼出來。

   下載谷歌瀏覽器外掛

20181116155624chromecj.com.crx,可以在百度所有別人已經下載好的,不用翻牆去下載。下載好後,開啟谷歌瀏覽器,點選右上角,找到更多工具/擴充套件程式,然後直接將下載好的拖進來就可以自動安裝了

之後,在谷歌瀏覽器右上會出現一個如下面 所示的圖示:

代表已經安裝成功了,然後我發現每次開啟瀏覽器後,要重新點選這個外掛,先關閉再開啟一次才能生效。

不然還是會報跨域請求的錯誤。汗。。。。除錯程式的時候,做好每次先清理一下快取,不然有可能達不到期望的結果。

下面我將貼出ionic使用http的post訪問的方法:

我使用的開發工具是webstorm2018,瀏覽器模式下執行的ionic3程式,angular6版本

app.module.ts中記得引入httpClientModule

下面僅展示login登入

login(mobile,password):Observable<string []>{
  return this.getUrlReturn(this.apiUrlLogin1);
}
private getUrlReturn(url:string):Observable<string []>{
  let param :URLSearchParams = new URLSearchParams();
  param.append('username','admin');
  param.append('password',"123456");
  let myParam =JSON.stringify(param);
  const httpOptions = {  headers: new HttpHeaders(
    {
      'Content-Type': 'application/x-www-form-urlencoded'
    })
};
  return this.http.post(url,myParam,httpOptions).pipe(
    map(this.extractData),
    catchError(this.handleError)
  );
}


//處理介面返回的資料,處理成json格式
private extractData(res:HttpResponse<any>){
   let body=JSON.stringify(res);
   console.log("body的值:");
   console.log(body);
  return body;
}


//處理請求中的錯誤,考慮了各種情況的錯誤處理,並在console中顯示error
private handleError(error:HttpErrorResponse) {
 console.log("指定到出錯的方法來了*************");
  let errMsg:string;
  if(error instanceof Response){
    const body=error.json()||'';
    const err=body||JSON.stringify(body);
    errMsg=error.status+'--'+error.statusText||''+err;
  }else {
    errMsg=error.message?error.message:error.toString();
  }
  console.error(errMsg.toString());
  return Observable.throw(errMsg);
}
private apiUrlLogin1 = 'http://localhost:8080/web/mobile/login';

服務端基於ssm框架,tomcat伺服器,埠號8080,其中,web為部署在tomcat伺服器上名稱,mobile/login為控制層方法上的註解