2017-07-21 49 views
0

在我目前的情況下,我使用一個$ http攔截器來捕獲響應錯誤並顯示一條簡單的消息讓用戶知道出了什麼問題。 但是現在我想區分加載頁面期間發送的請求或由於用戶本身的操作而發送的請求(按下按鈕,輸入字段...) 。如何知道一個頁面何時被完全加載(包括它的AJAX請求)

的$ httpInterceptor我想有實例:

return { 
    responseError: function (response) { 
     // IF THE REQUEST IS FROM A PAGE LOAD 
     // DO SOMETHING 
     // IF THE REQUEST IS NOT FROM A PAGE LOAD 
     // DO SOMETHING ELSE 
     return $q.reject(response); 
    } 
}; 

爲了使它有點更清晰:

案例1:用戶正在等待頁面加載:

  • REQ 1發送
  • REQ 2發送
  • REQ 3發送
    • REQ 4 REQ的響應3
      • REQ 5 REQ的響應4
  • REQ 6被髮送
    • REQ 7被髮送之後發送後發送REQ 6的響應後

以上所有請求都是頁面加載的一部分,如果其中一個返回錯誤,它應該有一個特定的行爲。

請求時觸發的不是一個頁面加載的,因爲:

CASE 2:用戶按下一個按鍵:

  • REQ 1被髮送
    • REQ 2 REQ的響應之後發送1

這些要求ar e不是頁面加載的一部分,並且在發生錯誤時應採取不同的行爲。

有什麼辦法可以讓這兩種情況有所不同嗎? 由於我的項目非常大,我不想更改每個$ http請求的代碼,以確定它是否來自頁面加載,所以這對我來說不是一個解決方案。

+0

退房此鏈接https://stackoverflow.com/questions/4231580/get-if-browser-is-busy – Nicolas

+0

定義你是什麼意思與頁面loada,(諧音HTML和其他資產?) 。如果我理解你會在模板加載失敗時捕獲一些裝飾消息的異常,以及其他來自某種API的時候,我是否正確? –

回答

0

您可以創建一些類型或正則表達式,並測試是否來自渴望url並做出選擇。

.service('RequestsInterceptor', [ 
'$q', 
function(
    $q, 
) { 
    var UNAUTHORIZED_CODE = 401; 
    var FORBIDDEN_CODE = 403; 
    var NOTFOUND_CODE = 404; 
    var INTERNAL_ERROR = 500; 

     this.request = function(config) { 
      //logic to send 
      return config || $q.when(config); 
     }; 
     this.responseError = function(rejection) { 

      console.log(rejection.config.url) 

      var apiPattern = /\/api\//; 

      if(apiPattern.test(rejection.config.url)) { 
       //do your logic when url are api 
      }else{ 
       //do your logic when url are templates 
      } 
      return $q.reject(rejection); 
     }; 
    } 
]); 
相關問題