解決基於angular5開發的ionic3使用http的post訪問ssm框架出現跨域請求失敗的問題
阿新 • • 發佈:2018-12-22
安裝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為控制層方法上的註解