2011-11-04 28 views
25

Tôi có một tình huống mà tôi đang thực hiện yêu cầu ajax đến máy chủ từ các bảng điều khiển Ext Grid khác nhau, v.v. trong khu vực Quản trị viên. Người dùng đã đăng nhập sẽ bị đăng xuất nếu không có hoạt động nào cho ví dụ. 5 phút là bình thường. Trong trường hợp này máy chủ gửi lại một chuyển hướng 403 đến trang đăng nhập. Ngay bây giờ tôi đang chèn một:EXTJS 4 - Trình nghe ngoại lệ toàn cầu

listeners:{ 
    exception: function(proxy, response, operation, eOpts) { 
     if(response.status == '403') 
     window.location = 'login'; 
    } 
} 

vào mỗi proxy của Cửa hàng quá mức cần thiết.
Ai đó có thể tử tế và cho tôi biết cách tôi có thể thêm người nghe vào tất cả các liên lạc giữa ExtJS và máy chủ? Tôi đang sử dụng Kiến trúc Ứng dụng MVC để nó có thể là một lớp lót trong controller.js hoặc app.js. Cảm ơn

Trả lời

28

Khi bắt đầu ứng dụng, hãy chèn đoạn mã sau. Với đáp ứng EVERY này, cho dù đó là từ cửa hàng hoặc biểu mẫu hay ..., sẽ được kiểm tra và chuyển hướng đến trang đăng nhập.

Ext.Ajax.on('requestexception', function (conn, response, options) { 
    if (response.status === 403) { 
     window.location = 'login'; 
    } 
}); 
+1

vui, cả hai chúng tôi đều trả lời câu hỏi này cùng lúc và cả hai đều trả lời giống nhau. Vì vậy, nó phải là chính xác. – nightwatch

+0

Mắt của Bull! Cảm ơn bạn rất nhiều –

+0

đẹp, cảm ơn rất nhiều – pylover

7

Tôi không thực sự chắc chắn nếu điều này sẽ bắt tất cả các yêu cầu ajax nhưng giả sử bạn đang sử dụng AjaxProxy cho tất cả các thông tin liên lạc với máy chủ cần làm việc: xử lý các sự kiện 'requestexception' trong singleton Ext.Ajax một cái gì đó như thế này

Ext.Ajax.on('requestexception', function(conn, response, options, eOpts) { 
    //your error handling here 
}); 

Tôi chưa thử nhưng nếu bạn làm thế, bạn có thể đăng cập nhật tại đây không?

+0

@Sascha, nightwatch Cảm ơn cả hai bạn. Nó hoạt động tốt. – user798612

6

Một giải pháp hoàn thiện hơn, trong đó nó sẽ là một nhận tất cả là thế này:

Ext.util.Observable.observe(Ext.data.Connection, { 
    requestexception: function(conn, response, options) { 
     if(response.status == '403') 
      window.location = 'login'; 
    } 
}); 

Điều này là do các lớp cơ bản, Ext.data.Connection được sử dụng không chỉ trong Ext.Ajax nhưng cũng như Ext.data.Proxy được sử dụng bởi Ext.data.Store, Ext.data.Model. Thao tác này xử lý các trường hợp ngoại lệ trên các cuộc gọi như store.load()model.save(). Đây sẽ là một trình xử lý toàn diện hơn.

Xem chi tiết khác trong my blog post.

+0

Ext.util.Observable.observe không phải là một chức năng trong Ext JS 5.x. Bạn phải sử dụng Ext.Ajax.on – jprism

+0

Không, bạn không có, và có trong Ext JS 5.0.1 'typeof Ext.util.Observable.observe' sẽ xuất ra hàm' "" – EricLavault

Các vấn đề liên quan