Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

$http returns error when response is 304 (Not Modified) in angularjs

Tags:

angularjs

I'm using angularjs $http for making request to asp net web api. The web api on the server manages the caching via ETags. If my response status code is 304 then it goes in the error function and not in the success. I don't understand what is the reason for this weird behavior of angularjs. Below is my code

function getEmployeesPartial(pageIndex, pageSize) {
        var deferred = $q.defer();
        var uri = config.remoteServiceName + 'odata/Employees?$select=EmployeeId,FirstName,LastName,Email,Designation/Name&$top=' + pageSize + '&$skip=' + (pageIndex * pageSize) + '&$inlinecount=allpages' + '&$expand=Designation';
        var authData = common.getAuthData();
        var authHeaderValue = "Bearer " + authData.token;
        var etagHeaderValue = angular.empty;
        if (common.etag !=angular.empty) {
            etagHeaderValue = common.etag;
        }
        $http.get(uri, { headers: { 'Authorization': authHeaderValue,'If-None-Match':etagHeaderValue } }).success(function (response, status, headers, httpconfig) {
            // alert(headers('Etag'));
            common.etag = headers('Etag');
           deferred.resolve(response);
        }).error(function (err, status, headers, httpconfig) {
            if (status === 500) {
                deferred.reject(err['odata.error'].innererror.message);
            }
            deferred.resolve();

        });

        return deferred.promise;
    }

Any ideas ?

like image 207
MAQ Avatar asked May 27 '26 16:05

MAQ


1 Answers

We have solved the problem by implementing a HTTP interceptor and letting the interceptor resolve on status 304 rather than reject.

// register the interceptor as a service
$provide.factory('myHttpInterceptor', function ($q, dependency1, dependency2) {
    return {

        'responseError': function (rejection) {
            if (rejection.status === 304)  return $q.resolve(rejection);

            return $q.reject(rejection);
        }
    };
});
like image 117
sfs Avatar answered May 30 '26 04:05

sfs



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!