303由于Javascript错误,响应未重定向

303由于Javascript错误,响应未重定向,javascript,angularjs,redirect,mellon,Javascript,Angularjs,Redirect,Mellon,我想从Web服务获取数据,这是通过以下方式完成的: $scope.data = itemsApi.search(null, $scope.filterCriteria); itemsApi的定义如下: angular.module('rootApp') .factory('itemsApi ', function($resource, rootURL) { return $resource(rootURL + '/items/:id/:action/:correlationUid',

我想从Web服务获取数据,这是通过以下方式完成的:

$scope.data = itemsApi.search(null, $scope.filterCriteria);
itemsApi的定义如下:

angular.module('rootApp')

.factory('itemsApi ', function($resource, rootURL) {
    return $resource(rootURL + '/items/:id/:action/:correlationUid', {
        id : '@itemIdentification'
    },

    search : {
        method : 'POST',
        isArray : false
    }
 });
});
通常情况下,这很好。获取数据,我的Angular应用程序通过显示数据来完成网页

但是,我现在有了安全措施,如果用户未登录或其会话已过期,这些安全措施会将用户重定向到SSO登录页面。这意味着可以在API调用中检索303状态代码,并返回一个网页(html,200)。
$scope.data
现在包含HTML而不是JSON,因为浏览器处理重定向,并且发生Javascript错误,可能会阻止浏览器继续执行重定向:

“错误:[$resource:badcfg]资源配置中有错误。应为。” 响应以包含数组但获取了对象 $resource/badcfg?p0=array&p1=object

我曾尝试在响应上创建一个拦截器,找出是否检索HTML页面而不是JSON,并据此采取行动,但我发现这是一个肮脏的解决方案,我猜当项目处于进一步状态时,它会引起问题


我如何配置应用程序,以便在http请求上执行重定向,而不是(尝试)解析为JSON?

我也遇到了这个问题,我解决这个问题的方法(我使用的是C#MVC)就是创建一个自定义授权属性来返回403,而不是重定向,这样ajax调用就会简单地返回一个错误,就像你一样,我觉得在客户端做一些事情是肮脏的。你使用拦截器的方式实际上是最理想的方式。看看这个@GangadharJannu,我的应用程序非常大我从不确定用户单击了哪个部分。此外,我正在处理部分html文件,因此当我将用户重定向回所请求的位置时,我会得到混乱的布局。但是,我可以使用$window.location.reload();暂时忽略关于响应内容的错误。但我希望有更好的解决方案。感谢您与我一起思考!@Joetjah您可以跟踪响应状态以检查是否为303,而不是检查响应type@GangadharJannu浏览器处理303并返回重定向指向的html页面Javascript中的“response”对象不像普通的JSON对象那样包含属性“response.status”,但它是纯HTML。这就是为什么它首先是一个问题,Javascript代码需要JSON。