最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Angular2 http jsonp的實例詳解

 更新時間:2017年08月31日 09:50:17   作者:maxer025  
這篇文章主要介紹了Angular2 http jsonp的實例詳解的相關(guān)資料,希望通過本能幫助到大家,需要的朋友可以參考下

Angular2 Http

1. 使用Http

絕大部分應(yīng)用程序都會和后臺服務(wù)打交道,Http是瀏覽器和服務(wù)器之間通訊的主要協(xié)議,通過Http調(diào)用來訪問遠程服務(wù)器上相應(yīng)的 Web API。

HttpModule 并不是 Angular 的核心模塊,通過Angular包中一個名叫 @angular/http 的獨立附屬模塊發(fā)布了出來。我們的應(yīng)用將會依賴于Angular的 http 服務(wù),它本身又依賴于其它支持類服務(wù)。來自 @angular/http 庫中的 HttpModule 保存著這些 HTTP 相關(guān)服務(wù)提供商的全集。

現(xiàn)代瀏覽器支持兩種基Http的API : XMLHttpRequest (XHR) 和 JSONP 。少數(shù)瀏覽器還支持 Fetch 。在Angular中分別對應(yīng)@angular/http 庫中的HttpModule 和JsonpModule兩個模塊。

2. GET獲取數(shù)據(jù)

為了能夠使用XHR中的Get方法來獲取數(shù)據(jù)信息,我們把 HttpModule 添加到 AppModule 的 imports 列表中,這樣本應(yīng)用程序的任何地方都可以訪問XHR服務(wù)。

我們使用Http服務(wù)的實例中的get方法來執(zhí)行http get方法獲取數(shù)據(jù),該方法的調(diào)用形式如下

get(url: string, options?: RequestOptionsArgs) : Observable<Response> 

來看一個簡單的例子,代碼如下

@Component({ 

selector: 'demo', 

template: '<button id="input" (click)="click()">Get Data</button>', 

}) 

export class DemoComponent { 

constructor(private http: Http) { 

} 

url: string = '/api/list'; 

click() { 

this.http.get(this.url).subscribe(function (data) { 

console.log(data) 

}) 

} 

} 

我們在DemoComponent構(gòu)造函數(shù)中采用DI獲取了Http服務(wù)的實例http,當點擊獲取數(shù)據(jù)的按鈕后,便能夠通過Http實例中的get方法,根據(jù)其參數(shù)url地址及options?: RequestOptionsArgs參數(shù)來獲取對應(yīng)的數(shù)據(jù)信息。該方法返回的是一個可觀察對象 (Observable),針對可觀察對象,我們可以subscribe對應(yīng)的方法,當數(shù)據(jù)返回后進行處理。

3. POST發(fā)送數(shù)據(jù)

同樣的,為了能夠使用XHR中的POST方法來獲取數(shù)據(jù)信息,我們把 HttpModule 添加到 AppModule 的 imports 列表中,這樣本應(yīng)用程序的任何地方都可以訪問XHR服務(wù)。

我們使用Http服務(wù)的實例中的post方法來執(zhí)行http post方法獲取數(shù)據(jù),該方法的調(diào)用形式如下

post(url: string, body: any, options?: RequestOptionsArgs) : Observable<Response> 

來看一個簡單的例子,代碼如下

@Component({ 

selector: 'demo', 

template: '<button id="input" (click)="click()">Get Data</button>', 

}) 

export class DemoComponent { 

constructor(private http: Http) { 

} 

url: string = '/api/post'; 

click() { 

let headers = new Headers({ 'Content-Type': 'application/json' }); 

let options = new RequestOptions({ headers: headers }); 

this.http.post(this.url, JSON.stringify({ 'id': '1' }), options).subscribe(function (data) { 

console.log(data) 

}) 

} 

} 

我們在DemoComponent構(gòu)造函數(shù)中采用DI獲取了Http服務(wù)的實例http,當點擊獲取數(shù)據(jù)的按鈕后,便能夠通過Http實例中的get方法,根據(jù)其參數(shù)url地址, body:any及options?: RequestOptionsArgs參數(shù)來提交對應(yīng)的數(shù)據(jù)信息,其中body表示傳遞到服務(wù)器端的數(shù)據(jù)信息。示例中,我們傳遞json格式的數(shù)據(jù)到服務(wù)器端,所以使用了'Content-Type': 'application/json'頭信息進行包裝。

該方法返回的是一個可觀察對象 (Observable),針對可觀察對象,我們可以subscribe對應(yīng)的方法,當數(shù)據(jù)返回后進行處理。

4. JSONP獲取數(shù)據(jù)

用 Angular Http 服務(wù)發(fā)起 XMLHttpRequests,是與服務(wù)器通訊時最常用的方法。但它不適合所有場景。

出于安全的考慮,網(wǎng)絡(luò)瀏覽器會阻止調(diào)用與當前頁面不“同源”的遠端服務(wù)器的XHR。所謂源就是 URI 的協(xié)議 (scheme) 、主機名 (host) 和端口號 (port) 這幾部分的組合。這被稱為同源策略。

為了可以向不同源的服務(wù)器發(fā)起 XHR 請求,這時候就需要支持一種老的、只讀的 ( 譯注:即僅支持 GET) 備選協(xié)議,這就是 JSONP。

為了能夠使用JSONP中的Get方法來獲取數(shù)據(jù)信息,我們把 JsonpModule 添加到 AppModule 的 imports 列表中,這樣本應(yīng)用程序的任何地方都可以訪問Jsonp服務(wù)。

Angular的Jsonp服務(wù)不但通過JSONP 擴展了Http 服務(wù),而且限制我們只能用GET請求,調(diào)用的形式如下。

get(url: string, options?: RequestOptionsArgs) : Observable<Response> 

我們來看一個例子,該示例和Http Get訪問十分類似,

@Component({ 

selector: 'demo', 

template: '<button id="input" (click)="click()">Get Data</button>', 

}) 

export class DemoComponent { 

constructor(private jsonp: Jsonp) { 

} 

url: string = '/api/list'; 

click() { 

this.jsonp.get(this.url).subscribe((data) => { 

console.log(data); 

}); 

} 

} 

5. 結(jié)果處理

5.1 可觀察對象

我們通過Http以及Jsonp的api接口可以知道,默認返回值都是可觀察對象 Observable< Response >??梢园芽捎^察對象 Observable 看做一個由某些“源”發(fā)布的事件流。 通過 訂閱 到可觀察對象 Observable ,我們監(jiān)聽(subscribe)這個流中的事件。 在這些訂閱中,我們指定了當 Web 請求生成了一個成功事件 ( 有效載荷是英雄數(shù)據(jù) ) 或失敗事件 ( 有效載荷是錯誤對象 ) 時該如何采取行動,如示例中所示。

我們的服務(wù)可以返回 HTTP 響應(yīng)對象Response。但這可不是一個好主意! 數(shù)據(jù)服務(wù)的重點在于,對消費者隱藏與服務(wù)器交互的細節(jié)。其實上,我們最關(guān)心的還是獲取到的返回數(shù)據(jù)信息,這時候我們就可以利用RxJS庫來對事件流進行一些額外的處理。

RxJS("Reactive Extensions" 的縮寫)是一個被 Angular 認可的第三方庫,它實現(xiàn)了異步可觀察對象 (asynchronous observable) 模式。Rxjs庫中包含很多對事件流進行處理的方法,例如map,distinctUntilChanged等操作符。

針對返回數(shù)據(jù)是json格式的響應(yīng)對象,可以把Response解析成 JavaScript 對象——只要調(diào)一下 response.json() 就可以了,這時候我們就可以利用map操作符來進行處理,例如

this.jsonp.get(this.url) 

.map((rsp:Response)=>{ 

return rsp.json() 

}) 

.subscribe((data) => { 

console.log(data); 

}); 

5.2 Promise

雖然 Angular 的 http 客戶端 API 返回的是 Observable<Response> 類型的對象,但我們也可以把它轉(zhuǎn)成 Promise<Response>。這很容易,只需要調(diào)用可觀察對象 Observable< Response >的方法toPromise()就能夠進行轉(zhuǎn)化。例如

this.jsonp.get(this.url) 

.toPromise() 

.then((rsp: Response) => { 

console.log(rsp) 

});


以上就是對Angular http json的講解,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • angular簡介和其特點介紹

    angular簡介和其特點介紹

    這篇文章主要介紹了angular簡介和其特點介紹,本文講解了關(guān)于和jquery的比較、關(guān)于適用場合、關(guān)于UI的結(jié)合、關(guān)于angularjs的特點等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • AngularJS自定義表單驗證功能實例詳解

    AngularJS自定義表單驗證功能實例詳解

    這篇文章主要介紹了AngularJS自定義表單驗證功能,結(jié)合完整實例形式詳細分析了AngularJS實現(xiàn)表單驗證的相關(guān)指令、模型綁定、數(shù)據(jù)驗證等操作技巧,需要的朋友可以參考下
    2018-08-08
  • AngularJS 將再發(fā)布一個重要版本 然后進入長期支持階段

    AngularJS 將再發(fā)布一個重要版本 然后進入長期支持階段

    目前團隊正在開發(fā) AngularJS 1.7.0,而 1.7 的開發(fā)周期將一直持續(xù)到 2018 年 6 月 30 日
    2018-01-01
  • Angular 理解module和injector,即依賴注入

    Angular 理解module和injector,即依賴注入

    本文主要介紹Angular 理解module和injector的知識,這里整理了相關(guān)知識,并詳細介紹了依賴注入的問題,有興趣的小伙伴可以參考下
    2016-09-09
  • 詳解angularjs的數(shù)組傳參方式的簡單實現(xiàn)

    詳解angularjs的數(shù)組傳參方式的簡單實現(xiàn)

    本篇文章主要介紹了angularjs的數(shù)組傳參方式的簡單實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 利用require.js與angular搭建spa應(yīng)用的方法實例

    利用require.js與angular搭建spa應(yīng)用的方法實例

    這篇文章主要給大家介紹了關(guān)于利用require.js與angular搭建spa應(yīng)用的方法實例,文中通過示例代碼給大家介紹的非常詳細,對大家的理解和學習具有一定的參考學習價值,需要的朋友們下面跟著小編來一起看看吧。
    2017-07-07
  • angular學習之從零搭建一個angular4.0項目

    angular學習之從零搭建一個angular4.0項目

    本篇文章主要介紹了從零搭建一個angular4.0項目,主要用到的工具angular4.0、angular-cli、npm(v3.10.8)、node(v6.2.0),有興趣的可以了解一下
    2017-07-07
  • 詳解Angular的8個主要構(gòu)造塊

    詳解Angular的8個主要構(gòu)造塊

    Angular 主要分為八大構(gòu)造塊(也就是八個核心概念):模塊、組件、模板、元數(shù)據(jù)、數(shù)據(jù)綁定、指令、服務(wù)、依賴注入。有興趣的可以了解一下
    2017-06-06
  • AngularJS動態(tài)綁定HTML的方法分析

    AngularJS動態(tài)綁定HTML的方法分析

    這篇文章主要介紹了AngularJS動態(tài)綁定HTML的方法,結(jié)合實例形式分析了AngularJS實現(xiàn)動態(tài)綁定HTML的相關(guān)操作指令用法與使用注意事項,需要的朋友可以參考下
    2016-11-11
  • AngularJS用戶選擇器指令實例分析

    AngularJS用戶選擇器指令實例分析

    這篇文章主要介紹了AngularJS用戶選擇器指令,結(jié)合實例形式分析了angular指令實現(xiàn)選擇器功能的具體操作步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2016-11-11

最新評論

贵南县| 双辽市| 太和县| 五原县| 来凤县| 龙陵县| 瓮安县| 健康| 桦川县| 辰溪县| 东兰县| 根河市| 辽宁省| 黑山县| 通辽市| 曲周县| 邯郸县| 嘉峪关市| 温宿县| 阿巴嘎旗| 宕昌县| 申扎县| 兴安县| 曲靖市| 汕尾市| 江都市| 应用必备| 中宁县| 宜章县| 砀山县| 彩票| 丘北县| 固始县| 尚义县| 博湖县| 开江县| 利辛县| 隆德县| 尉氏县| 蛟河市| 苍溪县|