angularjs中的$http詳解
阿新 • • 發佈:2018-05-11
angularjs .... -type 回調 文檔 undefined fig post 常用
- 語法:
- 要將區別先弄清$http服務,它是對原生XMLHttpRequest對象的簡單封裝,是只能接受一個參數的方法,
- 這個方法會返回一個promise對象,具有sccess和error兩個方法。當然,我們也可以在響應返回時用then
- 方法來處理,會得到一個特殊的參數,代表了對象的成功或失敗信息,或者可以使用success和error回調
- 代替。
- $http(
- ).then(function success(resp){
- //響應成功時調用,resp是一個響應對象
- },function error(resp){
- // 響應失敗時調用,resp帶有錯誤信息
- }
- );
- 可以使用then()函數來處理$http服務的回調
- then()函數接收的resp(響應對象)包含5個屬性:
- 1. data(字符串或對象):響應體,就是後臺返回的數據
- 2. status:相應http的狀態碼,如200
- 3. headers(函數):頭信息的getter函數,可以接受一個參數,用來獲取對應名字的值
- 4. config(對象):生成原始請求的完整設置對象
- 5. statusText:相應的http狀態文本,如"ok"
- $http({
- url:url, //請求的url路徑
- method:method, //GET/DELETE/HEAD/JSONP/POST/PUT
- params:params , //轉為 ?param1=xx1?m2=xx2的形式
- data: data //包含了將被當做消息體發送給服務器的數據,通常在POST請求時使用
- }
- }).success(function(response, status, header, config, statusText){
- //成功處理
- }).error(function(data,header,config,status){
- //錯誤處理
- });
- then寫法與success參數是等價的,then方法和success方法的主要區別就是,then方法會接受到完整的響應對象,而
- success則會對響應對象進行析構。
- AngularJS中的簡單請求 --- $http --- 一個類似jquery的$.ajax的對象,用於異步請求
- 語法:
- $http服務的設置對象:
- 當我們把$http當成函數來使用時即$http(),需要傳入一個對象,這個對象可以包含以下鍵
- 1、method 字符串 表示發送的請求類型 get post jsonp等等
- 2、url 字符串 絕對或者相對的URL,請求的目標
- 3、params 字符串或對象 會被轉化成查詢字符串加到URL後面,如果不是字符串會被JSON序列化
- 4、data 字符串或者對象 這個對象包含了被當做消息體發送給服務器的數據,一般在POST請求中使用,並且從angular1.3開始可以在POST請求裏發送二進制數據
- 如var blob = new Blob({name:’張三’}); $http({method:’get’,url:’/‘,data:blob});
- 5、headers 對象 在我們做POST跨域和後臺配合的時候就用到了headers,其代表隨請求發送的HTTP頭字符串
- 6、xsrfHeaderName 字符串 保存XSFR令牌的HTTP頭的名稱
- 7、xsrfCookieName 字符串 保存XSFR令牌的cookie的名稱
- 8、transformRequest 函數或函數組 用來對HTTP請求頭和體信息進行轉換,並返回轉化後的版本,通常用於在請求發送給服務器之前對其序列化
- 9、transformResponse 函數或函數組 用來HTTP響應頭和響應體信息進行轉換,並返回轉化後的版本,通常用來反序列化
- 10、cache 布爾或緩存對象 如果設置為true angularjs會用默認的$http緩存對GET請求進行緩存
- 11、timout 數值或者promise對象,如果為數值那麽請求會在指定的毫秒後結束(會跳到失敗的error方法裏) ,如果為對象那麽promise對象在被resolve時請求會被中止,方法執行完畢再執行請求
- 12、responseType 字符串 該選項會在請求中設置XMLHttpResponseType屬性有以下類型: “”字符串默認,”arraybuffer”(arraybuffer),”blob”(blob對象),“document”(HTTP文檔),”json“(從JSON對象解析出來的json字符串),”text“(字符串),”moz-blob“(Firefox的接收進度事件),”moz-chunked-text“(文本流),”moz-chunked-arraybuffer”(arraybuffer流)
- $http服務的快捷方法
- $http提供了一些快捷方法讓我們使用,一共有六個(其實是六種請求模式)
- 1、$http.get(url字符串,config可選的配置-對象類型) 返回HttpPromise對象
- 2、$http.delete(url字符串,config可選的配置-對象類型) 返回HttpPromise對象
- 3、$http.head(url字符串,config可選的配置-對象類型) 返回HttpPromise對象
- 4、$http.jsonp(url字符串,config可選的配置-對象類型) 返回HttpPromise對象
- 5、$http.post(url字符串,data對象或字符串,config可選的配置-對象類型) 返回HttpPromise對象
- 6、$http.put(url字符串,data對象或字符串,config可選的配置-對象類型) 返回HttpPromise對象
- $http({
- url:url, //請求的url路徑
- method:method, //GET/DELETE/HEAD/JSONP/POST/PUT
- params:params , //轉為 ?param1=xx1?m2=xx2的形式
- data: data //包含了將被當做消息體發送給服務器的數據,通常在POST請求時使用
- }
- }).success(function(response, status, header, config, statusText){
- //成功處理
- }).error(function(data,header,config,status){
- //錯誤處理
- });
- 特別註意:
- 1.請求參數說明:
- url:url, //請求的url路徑
- method:method, //GET/DELETE/HEAD/JSONP/POST/PUT
- params:params , //轉為 ?param1=xx1?m2=xx2的形式
- data: data //包含了將被當做消息體發送給服務器的數據,通常在POST請求時使用
- 2.響應參數說明:
- response --- 響應體,即:要請求的數據
- status --- HTTP狀態碼
- header --- 頭信息
- config --- 用來生成原始請求的完整設置對象
- statusText --- 相應的HTTP狀態文本
- 3.緩存HTTP請求
- 默認情況下,$http服務不會對請求進行本地緩存。在發送單獨請求時,可通過向$http請求傳遞一個布爾參數來啟用緩存
- eg:
- $http.get({‘/api/users.json‘,{cache:true}})
- .success(function(data){ })
- .error(function(data){ })
- 解析:
- 第一次發送請求時,$http服務會向 /api/users.json發送一個GET請求,
- 第二次發送同一個GET請求時,$http服務會從緩存中取回請求的結果,而不會真的發送一個HTTP GET請求
- 設置啟動緩存後,AngularJS默認會使用 $cacheFactory,這個服務在AngularJS啟動時自動創建
- 如果想要對AngularJS使用的緩存進行更多的自定義控制,可以向請求傳入一個自定義的緩存實例代替true。
- 1.GET方式 --- params參數會轉為 ?param1=xx1?m2=xx2的形式
- 1.$http請求:
- $http({
- url:"/api/users.json",
- method:‘GET‘,
- params:{
- ‘username‘:‘jay‘
- }
- }
- }).success(function (response, status, headers, config) {
- /*response -- 成功返回的數據
- status -- 狀態碼
- headers -- 頭信息
- config -- 其他信息
- */
- }).error(function (response) {
- }
- });
- 2.快捷請求:
- $http.get(url, [config])
- .success(function(data){})
- .error(function(data){});
- 2.POST方式
- $http({method : ‘POST‘,params : { id:123}, data:{name:‘john‘,age:27}, url : "/mypath"})
- .success(function(response, status, headers, config){
- //do anything what you want;
- })
- .error(function(response, status, headers, config){
- //do anything what you want;
- });
- 2.快捷方式:
- $http.post(url, $scope.formData).success(function (response, status, headers, config) {
- ......
- }).error(function (response) {
- ......
- });
- 3.$http提交表單 --- 與Spring MVC交互, 使用這種方式
- 通用方式:
- $http({
- method: "POST",
- url: url,
- headers: {‘Content-Type‘: ‘application/x-www-form-urlencoded‘},
- data: $.param($scope.formData)
- }).success(function(result){
- }).error(function(result){
- });
- 快捷方式:
- $http.post(url, $scope.formData)
- .success(function(result){
- })
- .error(function(result){
- });
- eg:
- var data = {
- "server":$scope.server,
- "time":$("#time").val(),
- "day":day
- }
- $http({
- method: "post",
- url: ctx+‘/player/lossPlayer/list.htm‘,
- headers: {‘Content-Type‘: ‘application/x-www-form-urlencoded‘},
- data: $.param(data)
- }).success(function(result){
- if(result.tip!=undefined){
- //當前綁定的數據清空
- $scope.players = [];
- alert(result.tip);
- }else{
- console.log(result.json);
- $scope.players = $.parseJSON($.parseJSON(result.json).players);
- }
- });
- 4.使用$http指定的方法發送HTTP請求:
- get(url, [config]);
- delete(url, [config]);
- post(url, data, [config]);
- put(url, data, [config]);
- 5.發送jsonp請求:
- 為了發送JSONP請求,url中必須包含JSON_CALLBACK參數, jsonp(url,config) 其中config是可選的
- eg:
- var promise=$http.jsonp("/api/users.json?callback=JSON_CALLBACK");
angularjs中的$http詳解