Hầu hết các câu trả lời khác đều trả lời cách giải quyết vấn đề này. Tôi muốn xem xét, rất ngắn gọn, tại lý do tại sao không đồng bộ là tốt trong trường hợp này.
Thực tế, hầu hết Javascript trong trình duyệt là không đồng bộ. Lấy ví dụ, mã này:
document.getElementById('foo').onclick = function() {
alert('foo clicked');
};
document.getElementById('bar').onclick = function() {
alert('bar clicked');
};
Điều gì sẽ chạy trước? Bạn không biết, vì sự bất thường vốn có của mô hình trình duyệt (hoặc trên thực tế hầu hết mã hướng sự kiện). Bạn chạy mã khi một sự kiện xảy ra. Bạn thiết lập tài liệu, sau đó chờ sự kiện xảy ra và mã của bạn có thể được thực hiện bằng tất cả các loại đơn đặt hàng khác nhau, tùy thuộc vào sự kiện nào xảy ra trước tiên. Mã Javascript cần được thực hiện trong toàn bộ thời gian tồn tại của trang, không chỉ khi được tạo lần đầu tiên.
Vì vậy, nói chung Lập trình Javascript (hoặc ít nhất, lập trình Javascript vượt mức đơn giản nhất) thường sẽ không đồng bộ. Hơn nữa, nó làm cho rất nhiều ý nghĩa cho các yêu cầu HTTP được không đồng bộ là tốt.
Trước tiên, như bạn ngụ ý trong câu hỏi của mình, làm cho mã đồng bộ sẽ chặn thực thi. Đó là để nói, có thể bạn không muốn tạo một hoạt ảnh chờ hai giây để bắt đầu vì bạn đang thực hiện một yêu cầu HTTP thêm hai dòng nữa. Thời gian đáp ứng của máy chủ có thể là (a) bất thường và (b) chậm, do đó, không có ý nghĩa gì đối với việc thiết kế ứng dụng của bạn phụ thuộc vào tốc độ phản hồi của máy chủ của bạn.
Thứ hai và quan trọng hơn, người dùng của bạn sẽ không ngừng sử dụng trang vì tập lệnh của bạn đang thực hiện cuộc gọi AJAX. Người dùng của bạn không quan tâm. Người dùng của bạn có thể sẽ quan tâm rằng hành vi bình thường onscroll
của bạn không hoạt động vì tập lệnh của bạn hiện được gắn với yêu cầu AJAX không liên quan. Để gắn liền với bản chất không đồng bộ của toàn bộ lập trình Javascript của trình duyệt, phần lớn các cuộc gọi HTTP sẽ không bị chặn, không đồng bộ.
Chữ cái đầu tiên 'A' trong' AJAX' là viết tắt của không đồng bộ. – Gareth
Bạn có thể đặt tùy chọn 'async: true'. Các yêu cầu đồng bộ có thể tạm thời khóa trình duyệt, vô hiệu hóa bất kỳ hành động nào trong khi yêu cầu đang hoạt động. Không được khuyến khích. – jasssonpet
@Gareth Tôi đã biết rằng A đứng không đồng bộ, tuy nhiên tôi luôn nghĩ rằng điều này đề cập đến thực tế là yêu cầu được thực hiện mà không cần tải lại trang, tức là yêu cầu http 'cha mẹ' một lần nữa, do đó trang đó là 'không được đồng bộ hóa' với yêu cầu http ban đầu đã phân phối trang. – rgvcorley