tôi có chức năng này để mở khóa một danh sách người dùng hiện đang chỉnh sửa:Có thể nào, Chrome hủy bỏ các yêu cầu Ajax đang chờ xử lý, khi trình duyệt đang được chuyển hướng đến một URL khác?
function unsetLock(id) {
$.ajax({
type: "POST",
url: "/ajax.php?action=unsetLock",
dataType: 'json',
data: "id="+ id
});
return true;
}
Khi dùng điều hướng khỏi danh sách, tôi phải hủy bỏ khóa:
unsetLock(lockID);
document.location.href='/page/to/navigate/back/to.php';
Tuy nhiên unlock này đôi khi hoạt động và đôi khi không. Tôi nghĩ rằng đó là vì document.location.href
được thực thi, trước khi cuộc gọi ajax thực sự được gửi đến máy chủ.
Tôi làm cách nào để buộc mở khóa trước khi điều hướng người dùng đến trang tiếp theo?
Thực ra tôi không cần phải chờ phản hồi Ajax, vì tôi muốn chuyển hướng người dùng, cho dù thành công hay không. Tôi chỉ muốn chắc chắn rằng nó đang được chuyển đến máy chủ.
Nếu tôi đặt document.location.href
bên trong hàm Ajax, nó sẽ chờ trả lời.
Bởi vì, tôi muốn chuyển hướng người dùng, cho dù yêu cầu Ajax thành công hay không. – JochenJung
Ok, nhưng bạn cũng muốn đợi yêu cầu ajax trong trường hợp nó * làm * thành công. Vì vậy, bạn phải sử dụng tùy chọn 'success', vì đó là cách duy nhất để biết nếu nó đã thành công. Nhưng thay vì đặt chuyển hướng trong đó, thay đổi 'var' trong đó và sử dụng' setInterval() 'gần nơi bạn đang gọi hàm' unsetLock'. Nếu var được kiểm tra là đúng, chuyển hướng, nếu không, sau khi một số chuyển hướng vòng bất kể. Về cơ bản, cách này bạn sẽ cho thời gian gọi ajax để thành công. Tôi nghĩ rằng đây là cách tốt nhất (chỉ?) Vì bạn sẽ không nhận được một 'thất bại' rõ ràng và nhanh chóng từ cuộc gọi ajax. – kasimir
Tôi không quan tâm liệu cuộc gọi có thành công hay không. Tôi chỉ muốn chắc chắn rằng nó đã được gửi đi. Nhưng tôi thấy, điều này là không thể. Tôi phải chọn giữa việc đợi máy chủ trả lời hoặc chỉ có trình duyệt chậm gửi sự kiện. – JochenJung