2016-10-03 66 views
0

我使用不同的視圖配置我的Backbone路由器。但在一些意見中,我需要獲取一個集合。如果用戶未登錄,則服務器返回401 http狀態。如何使用Backbone處理401未經授權的響應?

所以,我配置jQuery的全局AJAX設置這樣的:

$.ajaxSetup({ 
    xhrFields: { 
     withCredentials: true 
    }, 
    crossDomain: true, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.log("error ajax"); 
     if (jqXHR.status == 401) { 
      console.log('error 401'); 
      app.router.navigate('', { trigger: true }); 
     } 
    } 
}); 

但它永遠不會在錯誤的回調,即使響應代碼是401

回答

1

而不是修改AJAX選項全球,我修改了Backbone.sync函數來處理認證。

Backbone.sync = (function(syncFn) { 
    return function(method, model, options) { 
     options = options || {}; 

     var beforeSend = options.beforeSend, 
      error = options.error; 

     // Add headers 
     options.beforeSend = function(xhr) { 
      xhr.setRequestHeader('withCredentials', true); 
      if (beforeSend) return beforeSend.apply(this, arguments); 
     }; 

     // handle unauthorized error (401) 
     options.error = function(xhr, textStatus, errorThrown) { 
      console.log("error sync"); 
      if (error) error.call(options.context, xhr, textStatus, errorThrown); 
      if (xhr.status === 401) { 
       console.log('error 401'); 
       app.router.navigate('', { trigger: true }); 
      } 
     }; 

     return syncFn.apply(this, arguments); 
    }; 
})(Backbone.sync); 
+0

謝謝@Emile。它運作良好。 –

相關問題