Những gì tôi đang cố gắng làm là gắn thêm hình ảnh vào div (để người dùng biết thứ gì đó đang tải) và sau đó tôi gọi hàm jquery ajax, được đặt thành "async: false". Đây là mã của tôi:Dừng khóa trình duyệt trong khi (đồng bộ) Ajax?
$jQuery("#playersListDiv").html(loadingImage);
$jQuery.ajax({
type: "POST", /* this goesn't work with GET */
url: urlValue, /*ex: "NBAgetGamesList.php" */
data: parameters, /*ex: "param1=hello" */
cache: false,
async: false,
success: function(data){
}
});
Vấn đề là trình duyệt khóa và không thêm hình ảnh tải cho đến SAU KHI cuộc gọi ajax hoàn tất vô dụng. Firefox là trình duyệt duy nhất thực sự gắn thêm hình ảnh tải. IE, Chrome và Safari KHÔNG thêm hình ảnh tải.
Tôi biết khóa trình duyệt xảy ra vì async được đặt thành false nhưng đây là tùy chọn duy nhất của tôi vì tôi phải đợi yêu cầu này hoàn tất trước khi tiếp tục vì tôi cần dữ liệu được trả về.
Có cách nào xung quanh vấn đề này không? Nếu tôi đặt cảnh báo sau khi tôi thêm hình ảnh tải hoạt động nhưng tôi không muốn cảnh báo xuất hiện mỗi lần.
Đồng bộ, theo định nghĩa, là "chặn". Làm thế nào nó sẽ ảnh hưởng đến các trình duyệt khác nhau nhưng thường chặn các cập nhật và tương tác DOM. Làm cho nó không đồng bộ để "khắc phục" sự cố. –
Tại sao không chỉ làm cho nó không đồng bộ và đặt mã để chạy sau này trong một chức năng riêng biệt. Sau đó gọi hàm trong mã trả về? – Bob
"vì tôi cần dữ liệu được trả về". Đó là những gì gọi lại cho. Mã của bạn không phải là tuyến tính. – epascarello