5

내 응용 프로그램에서 오류 처리 부분을 작성하고 싶습니다.이 코드는 아래에서 사용하지만 오류 500이 발생해도 작동하지만 작은 문제가 있거나 처음에는 페이지로드가 발생합니다. 몇 초 동안 오류 페이지를로드 한 후 어떻게이 몇 초를 제거하고 오류 페이지로 직접 이동하지 않고 메인 페이지를 열 수 있습니까? 그 컨트롤러의 실행 후 HTML 템플릿을로드 할 수있는 방법이 있습니까?Ajax 요청에서 angularjs 오류 처리

var interceptor = ['$rootScope', '$q', function (scope, $q) { 

     function success(response) { 
      return response; 
     } 

     function error(response) { 
      var status = response.status; 
      if (status == 500) { 
       window.location= "http://www.domain.lan/#!/error"; 


       return; 
      } 
      if (status == 403) { 

       // window.location = "dashboard"; 
       return; 
      } 
      // otherwise 
      return $q.reject(responseInterceptors); 

     } 

     return function (promise) { 
      return promise.then(success, error); 
     } 

    }]; 
    $httpProvider.responseInterceptors.push(interceptor); 
+0

은 $ injector.get ('$ state')를 사용합니다. go ('error'); 하지만이 문제에 어떤 영향도 미치지 않습니다. –

+0

$ routeProvider/$ stateProvider 자체에서 이러한 오류를 처리하지 않는 이유는 무엇입니까? –

+0

어떻게 할 수 있습니까? 메신저의 새로운 기능 –

답변

3

각도 ui-router를 사용한다고 가정합니다.

첫 번째로 $ stateProvider 설정에 하나의 상태를 추가하여 ui-router가 '오류'상태를 이해해야합니다.

경로 설정 코드

//added state to understand error 
$stateProvider.state("error": { 
    url: "/error", 
    templateUrl: '/views/error.html', 
    controller: 'errorCtrl' //optional if you want any specific functionality 
});   

그리고 당신은에서는 window.location을했고, 새로 고침 페이지를 일으키는 원인이되는 URL,에서는 window.location을 설정합니다. 대신에서는 window.location 사용하면 window.location.hash

차단 기능 변화

var interceptor = ['$rootScope', '$q', '$location', function (scope, $q, $location) { 
function success(response) { 
    return response; 
} 

function error(response) { 
    var status = response.status; 
    if (status == 500) { 
     //window.location= "http://www.domain.lan/#!/error"; 
     //window.location.hash= "/error"; //it will rewrite the url without refreshing page 
     $location.path('error'); 
     return; 
    } 
    if (status == 403) { 

     // window.location = "dashboard"; 
     return; 
    } 
    // otherwise 
    return $q.reject(responseInterceptors); 

} 

return function (promise) { 
    return promise.then(success, error); 
} 

}]; 
$httpProvider.responseInterceptors.push(interceptor); 

다른 방법을 사용하는 동일한 $의 state.go ('오류')을 시도 할 수 있습니다; $ state 의존성을 추가하는 것을 잊지 마십시오.

희망이 도움이 될 것입니다. 혼란이 있다면 알려주세요.

+0

나는 config $ locationProvider.hashPrefix ('!')에서 hashprifix를 사용합니다; , window.location.hash 오류가 발생하면 어떻게 해결할 수 있습니까? –

+0

@mhadadi 업데이트 된 코드를 시도하십시오 –

+0

$ state.go 및 $ 위치를 사용하지만 둘 다 내 게시물에서 첫 번째 템플릿로드 및 아약스 요청 보내기 전에 문제가 있지만 아약스 반환 404 및 div 빈 및 몇 가지 후에 남아 있습니다. 두 번째 페이지가 오류 상태로 변경됩니다.이 몇 초를 제거하고 사용자가 대시 보드 페이지로 이동할 때 (예를 들어 몇 가지 오류가있는 경우) 오류가없는 페이지로 이동합니다. –