angular學習筆記(二十三)-$http(1)-api

詩&遠方發表於2014-07-29

之前說到的$http.get和$http.post,都是基於$http的快捷方式.下面來說說完整的$http:

$http(config)

$http接受一個json格式的引數config:

config的格式如下:

{

  method:字串 ,

  url:字串,

  params:json物件,

  data:請求資料,

  headers:請求頭,

  transformRequest:函式,轉換post請求的資料的格式,

  transformResponse:函式,轉換響應到的資料的格式,

  cache:布林值,

  timeout:數值,從發出請求開始計算,等待的毫秒數,超過這個數還沒有響應,則返回錯誤

  withCredentials:布林值

}

 

1.method: (必填)

  請求的方法,字串格式,'post','get','head','delete','put','jsonp'

  (其中head方法和get請求方式一致,但是head方法沒有響應體,只有響應狀態碼,用於檢測該url是否可以獲得get請求)

2.url: (必填)

  請求的路徑,字串格式

3.params: 

  請求帶有的引數,json物件: 

{key1:'value1',key2:'value2'}

//轉換成

url?key1=value1&key2=value2

4.data:

  post請求所提交的資料,字串或者json物件

5.headers:

  請求頭,json物件,可以自定義配置http請求頭的引數

6.transformRequest:

  函式,轉換post請求的資料的格式

7.transformResponse:

  函式,轉換響應到的資料的格式

8.cache:

  布林值,是否啟用快取(暫時不懂,需要請教老公)

9.timeout:

  數值,從發出請求開始計算,等待的毫秒數,超過這個數還沒有響應,則返回錯誤

10.withCredentials:

  不懂

 

$http()返回一個物件,該物件有三個方法:

1. then([success],[error]):

    .then()方法傳入兩個引數:

    [success]: function(res){}

    第一個引數是一個請求成功的回撥函式,該函式接受1個引數res,res是一個json物件,它有四個屬性值,分別是data,status,headers,congfig,這四個值就是http://www.cnblogs.com/liulangmao/p/3864954.html這裡面的.success()方法傳入的函式的四個引數

    [error]: function(res){}

    第二個引數是一個請求失敗的回撥函式,該函式接受1個引數res,res是一個json物件,它有四個屬性值,分別是data,status,headers,congfig,這四個值就是http://www.cnblogs.com/liulangmao/p/3864954.html這裡面的.error()方法傳入的函式的四個引數

2. success(function(){})

    .success方法傳入一個引數,是請求成功的回撥.該函式接受4個引數,分別就是data,status,headers,congfig,和http://www.cnblogs.com/liulangmao/p/3864954.html裡面的.success()方法傳入的函式的四個引數是一樣的.

3. error(function(){})

    .error方法傳入一個引數,是請求失敗的回撥.該函式接受4個引數,分別就是data,status,headers,congfig,和http://www.cnblogs.com/liulangmao/p/3864954.html裡面的.error()方法傳入的函式的四個引數是一樣的.

注意: 其中,.success和.error兩個方法都返回撥用自己的這個物件,所以這個物件還是具有了.then(),.success(),.error()方法,所以可以鏈式呼叫:

    var obj1 = $http({
        method:'GET',
        url:'/name'
    });

    var obj2 = obj1.success(function(res){data,status,headers,config});

    var obj3 = obj2.error(function(res){data,status,headers,config});

    console.log(obj1 === obj2);    //true
    console.log(obj1 === obj3);    //true

但是.then方法不是返回撥用.then的物件... 它返回的是一個promise物件... 所以它只有.then方法,二不再有.success和.error方法:

    var obj = $http({
        method:'GET',
        url:'/name'
    });

    obj.then(function(res){return res.data+'2'},function(res){return '失敗'}).then(function(data){console.log(data)},function(data){alert(data)});

關於promise的.then()方法,詳見: http://www.cnblogs.com/liulangmao/p/3907571.html

在這裡無論請求是成功還是失敗,第二次呼叫.then都會呼叫成功回撥(因為它對promise傳送的通知是成功通知),回撥函式中的data就是上一個.then()的回撥的返回值,如果是成功回撥.也就是res.data+'2',如果是失敗回撥,那就是'失敗'

 

相關文章