Trong trường hợp này, tôi sẽ viết một handler cụ thể đối với các mã 403
tình trạng, có nghĩa là trái phép (máy chủ của tôi sẽ quay trở lại một 403 quá). Từ tài liệu jquery ajax, bạn có thể làm
$.ajax({
statusCode: {
403: function() {
relogin(onSuccess);
}
}
});
để đạt được điều đó.
Trong trình xử lý đó, tôi sẽ gọi phương thức relogin
, chuyển một hàm chụp những gì cần làm khi đăng nhập thành công. Trong trường hợp này, bạn có thể chuyển vào phương thức chứa cuộc gọi bạn muốn chạy lại.
Trong mã ở trên, relogin
nên gọi mã đăng nhập và onSuccess
phải là hàm kết thúc mã bạn thực thi mỗi phút.
EDIT- dựa trên làm rõ của bạn trong nhận xét, rằng kịch bản này xảy ra cho nhiều yêu cầu, cá nhân tôi sẽ tạo API cho ứng dụng của bạn nắm bắt tương tác với máy chủ.
app = {};
app.api = {};
// now define all your requests AND request callbacks, that way you can reuse them
app.api.makeRequest1 = function(..){..} // make request 1
app.api._request1Success = function(...){...}// success handler for request 1
app.api._request1Fail = function(...){...}// general fail handler for request 1
/**
A method that will construct a function that is intended to be executed
on auth failure.
@param attempted The method you were trying to execute
@param args The args you want to pass to the method on retry
@return function A function that will retry the attempted method
**/
app.api.generalAuthFail = function(attempted, args){
return function(paramsForFail){ // whatever jquery returns on fail should be the args
if (attempted) attempted(args);
}
}
như vậy với cấu trúc đó, trong phương pháp request1
của bạn, bạn sẽ làm điều gì đó như
$().ajax({
....
statusCode: {
403: app.api.generalAuthFail(app.api.request1, someArgs);
}
}}
các generalAuthFailure
sẽ trả về một callback mà thực hiện phương pháp mà bạn vượt qua trong.
Tôi phải làm điều đó một lần. Tôi chỉ đơn giản là lưu trữ nội dung của đối tượng 'data' gốc * (được chuyển đến phương thức' get') ở đâu đó an toàn và sử dụng lại nó trong một lệnh gọi 'get', được kích hoạt bằng một lần nhấp vào nút' tryry', hoặc một bộ đếm thời gian. –
http://api.jquery.com/jQuery.ajax/ bạn có thể sử dụng '.fail' cùng với' .done' và gọi phương thức gọi lại từ đó. –
@atornblad - Điều này sẽ không giúp đỡ vì đối tượng 'dữ liệu' có thể bị ghi đè bởi một yêu cầu AJAX khác được kích hoạt trước một lỗi' lỗi'. –