2013-06-08 29 views
15

$ httpProvider.interceptors gerçekte arayacak gibi görünmüyor. JSFiddle üzerinde, önleyici çalıştırıldığında ve $ http yanıtı başarılı olduğunda kaydedilen bir örnek oluşturdum. İstek önleme, yanıt zaten başarılı olarak döndükten sonra çalıştırılır. Bu biraz geriye doğru görünüyor.

TransformRequest'i kullanamıyorum çünkü yapılandırmadaki paramları değiştirmem gerekiyor. Bu kısım örnekte gösterilmemiştir. Veri döndürdü sonra

kullanıyorum angularjs 1.1.5

http://jsfiddle.net/skeemer/K7DCN/1/

JavaScript

var myApp = angular.module('myApp', []); 

myApp.factory('httpInterceptor', function ($q) { 
    return { 
     request: function (config) { 
      logIt('- Modify request'); 
      return config || $q.when(config); 
     } 
    }; 
}); 

myApp.config(function ($httpProvider) { 
    $httpProvider.interceptors.push('httpInterceptor'); 
}); 

function MyCtrl($scope, $http) { 
    // Hit a server that allows cross domain XHR 
    $http.get('http://server.cors-api.appspot.com/server?id=8057313&enable=true&status=200&credentials=false') 
    .success(function (data) { 
     //logIt(data[0].request.url); 
     logIt('- GET Successful'); 
    }); 

    $scope.name = 'Superhero'; 
} 


// Just the logging 
var logs = document.getElementById('logs'); 

function logIt(msg) { 
    var e = document.createElement('div'); 
    e.innerHTML = msg; 
    logs.insertBefore(e, logs.firstChild); 
} 

HTML

<div ng-controller="MyCtrl">Hello, {{name}}!</div> 
<br/> 
<div id="logs"></div> 

cevap

7

istek önleme çalışmıyor. Daha önce koşuyor. LogIt işleviniz en yeni iletiyi en üste ekler. Kodunuzu $ log hizmetini kullanmak için değiştirirseniz, önleyicinin önce çalıştığını görürsünüz. Yorumunuz okumadın mı

$httpProvider.responseInterceptors.push(function($q) { 
    return function(promise){ 
     var deferred = $q.defer(); 
     promise.then(
      function(response){ deferred.reject("I suddenly decided I didn't like that response"); }, 
      function(error){ deferred.reject(error); } 
     ); 
     return deferred.promise; 
    }; 
}); 

DÜZENLEMEYİ gerçekten responseInterceptors: Kabul/seçeneğine isterseniz

+3

Vay ... şimdi aptal hissetmek. Yine de teşekkürler! Diğer kodumda, $ httpProvider.interceptors yerine, kullanımdan kaldırılmış $ httpProvider.responseInterceptors kullanıyordum. – skeemer

18

aşağıdaki örneğe bakın $ httpProvider.responseInterceptors kullanıyor olmalıdır durdurma anda isteğini reddetmek artık kullanılmıyor, o bunun yerine bunun için gereken adımları:

$httpProvider.interceptors.push(function($q) { 
    return { 
     request: function(config){ return config; }, 
     response: function(response) { return $q.reject(response); } 
    }; 
}); 

Ben yararlı bir şeyler öğrendim, teşekkür

İlgili konular