2011-09-20 37 views
6

Tôi đang viết một ứng dụng jQuery Mobile yêu cầu xác thực người dùng. Cùng một người dùng không thể mở phiên của mình từ nhiều vị trí: nếu người dùng đăng nhập từ một trình duyệt khác, phiên trước đó được đánh dấu là đã chết.Cách xử lý lỗi thay đổi trang trong jQuery Mobile

Nếu người dùng cố chuyển sang trang khác bằng trình duyệt có phiên chết, thông báo "Lỗi tải trang" được hiển thị. Điều này là xấu bởi vì người dùng có thể không biết tại sao cô ấy lại gặp lỗi này. Có thể chạm vào sự kiện lỗi để tôi có thể kiểm tra trạng thái của phiên và chuyển hướng người dùng đến trang đăng nhập nếu phiên đó đã chết không?

Trả lời

1

tôi đã kết thúc forking jQuery Mobile và thêm một khả năng thêm xử lý lỗi tùy chỉnh: https://github.com/jquery/jquery-mobile/pull/2504 Tôi nghĩ rằng đây vượt trội so với các đề xuất khác vì nó không thêm bất kỳ chi phí nào ngoại trừ khi lỗi thực sự xảy ra.

CẬP NHẬT: Sẽ có sự kiện tải trang mới trong jQuery Mobile RC1. Điều đó sẽ giải quyết vấn đề này một cách thanh lịch và theo các tiêu chuẩn của dự án.

0
$(a).click(function(){ 
    // check for session? 
}); 
+0

Đó là một cách để giải quyết nhưng có thể hơi quá mức. Điều đó sẽ (khoảng) gấp đôi số lượng yêu cầu và khi ứng dụng được sử dụng chủ yếu trên các thiết bị di động, điều đó có thể trở thành một vấn đề đáng chú ý. –

2

liên quan:

Bạn có thể sử dụng giống như

pagebeforeshow

Được kích hoạt trên trang được hiển thị trước khi quá trình chuyển đổi bắt đầu.

Ví dụ (pseudo code):

$('#pageId').live('pagebeforeshow',function(event, ui){ 
    // check session here 
    if(!$session) { 
     // redirect to login 
     $.mobile.changePage('#login'); 
    } 
}); 
+0

Đây là giải pháp tốt hơn một chút. Tuy nhiên điều này vẫn còn cảm thấy một chút overkill. Tôi đã suy nghĩ về việc làm một ngã ba của jQuery Mobile và thêm một sự kiện lỗi có thể đăng ký để tôi có thể xử lý lỗi chỉ khi nó xảy ra. Sau đó, một lần nữa tối ưu hóa sớm là nguy hiểm vì vậy có lẽ tôi sẽ cuộn với đề xuất của bạn cho bây giờ. :) –

+0

Điều này không giúp được gì. sự kiện pagebeforeshow và pagebeforehide không được kích hoạt nếu tải trang không thành công. –

+0

Đề xuất tiếp theo của tôi là sử dụng AJAX và kiểm tra phản hồi của Apache, Ví dụ: nếu bạn nhận được phản hồi 200, bạn tốt, khác ...có thể cần phải lập bản đồ nhiều phản hồi hơn cũng như đây chỉ là một khái niệm –

3

Làm thế nào về sự kiện

pagechangefailed 

?

Nó được kích hoạt khi tải trang không thành công, điều này có vẻ như vậy.

Thông tin thêm về http://jquerymobile.com/test/docs/api/events.html

+0

Có, điều này có sẵn trong các phiên bản gần đây. Tuy nhiên tôi đã có vấn đề này trở lại vào tháng Chín khi điều này chưa được thực hiện. Trong câu trả lời của riêng tôi, tôi đã mô tả sự kiện được tải trang. Rõ ràng pagechangefailed có thể là đủ. –

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