Câu hỏi "Async: false" làm gì trong jQuery.ajax ()?


Cụ thể, nó khác với mặc định như thế nào ( async: true )?

Trong trường hợp nào tôi muốn đặt rõ ràng async đến falsevà có liên quan gì đến việc ngăn các sự kiện khác trên trang kích hoạt không?


198
2017-09-25 16:30


gốc


trông giống như câu hỏi này: http://stackoverflow.com/questions/133310/how-can-i-get-jquery-to-perform-a-synchronous-rather-than-asynchronous-ajax-req làm cho cuộc gọi đồng bộ .... - CSharpAtl
Dường như đối với tôi, nó phải được gọi là một cái gì đó khác với "Ajax" (JavaScript không đồng bộ và XML) nếu nó không phải là không đồng bộ ... - devlord
Không đồng bộ có nghĩa là tập lệnh sẽ gửi yêu cầu đến máy chủ và tiếp tục thực thi mà không cần chờ trả lời. Ngay sau khi trả lời được nhận một sự kiện trình duyệt được kích hoạt, nó sẽ cho phép tập lệnh thực thi các hành động liên quan. - SagarPPanchal


Các câu trả lời:


Nó có liên quan gì không   ngăn chặn các sự kiện khác trên trang   từ bắn?

Vâng.

Đặt async thành false có nghĩa là câu lệnh bạn đang gọi phải hoàn tất trước khi câu lệnh tiếp theo trong hàm của bạn có thể được gọi. Nếu bạn đặt async: true thì câu lệnh đó sẽ bắt đầu thực thi và câu lệnh tiếp theo sẽ được gọi bất kể câu lệnh async đã hoàn thành chưa.

Để hiểu rõ hơn, hãy xem: jQuery ajax thành công phạm vi chức năng ẩn danh


241
2017-09-25 16:36



Tôi đã luôn luôn tự hỏi làm thế nào điều này đã được thực hiện, kể từ khi JavaScript không phải là luồng. - Matt
Vì vậy, nó giống như một cách rẻ để thực hiện hoãn lại? - Lorenzo
@ L.DeLeo - không, không phải tất cả - trì hoãn là một cách khác để quản lý sự phức tạp của các cuộc gọi hàm không đồng bộ - async: false  loại bỏ sự không đồng bộ khỏi cuộc gọi hoàn toàn. Cuộc gọi đến ajax  khối - mã sau nó không được thực thi cho đến khi máy chủ trả lời. - Sean Vieira
Hãy nhớ rằng điều này cũng có nghĩa là trình duyệt sẽ không nắm bắt / kích hoạt bất kỳ sự kiện nào xảy ra trong khi ajax đang được thực thi. Tôi đã tìm ra điều này một cách khó khăn, cố gắng tìm ra lý do tại sao Firefox không kích hoạt sự kiện nhấp chuột. Hóa ra là do một sự kiện mờ "cưỡng bức" với một cuộc gọi đồng bộ sau chặn nó. - PålOliver
@Matt no it is not (nữa ^^) w3schools.com/html/html5_webworkers.asp - borrel


  • async:false = Mã đã tạm dừng. (Mã khác đang chờ đợi để điều này kết thúc.)
  • async:true = Mã tiếp tục. (Không có gì bị tạm dừng. Mã khác là không đợi.)

Đơn giản như thế này.


81
2018-03-08 03:41



JavaScript là chuỗi đơn. Không có gì chạy song song. - 4castle


Async:False sẽ giữ thực thi mã còn lại. Khi bạn nhận được phản hồi của ajax, chỉ sau đó, phần còn lại của mã sẽ thực thi.


20
2017-08-20 10:07





Nếu bạn tắt truy xuất không đồng bộ, tập lệnh của bạn sẽ chặn cho đến khi yêu cầu được hoàn thành. Nó rất hữu ích để thực hiện một số chuỗi các yêu cầu theo thứ tự đã biết, mặc dù tôi tìm thấy các cuộc gọi lại không đồng bộ để được sạch hơn.


16
2017-09-25 16:33



Joe: điều đó sẽ phụ thuộc vào việc bạn có bất kỳ chủ đề công nhân nào ở chế độ nền hay không. - John Millikin


Từ

https://xhr.spec.whatwg.org/#synchronous-flag

XMLHttpRequest đồng bộ bên ngoài công nhân đang trong quá trình bị xóa khỏi nền tảng web vì nó có tác động bất lợi đến trải nghiệm của người dùng cuối. (Đây là một quá trình lâu dài phải mất nhiều năm.) Các nhà phát triển không được thông qua sai cho đối số async khi môi trường toàn cầu JavaScript là một môi trường tài liệu. Các tác nhân người dùng được khuyến khích mạnh mẽ để cảnh báo về việc sử dụng như vậy trong các công cụ của nhà phát triển và có thể thử nghiệm với việc ném một ngoại lệ InvalidAccessError khi nó xảy ra. Hướng tương lai là chỉ cho phép XMLHttpRequests trong các luồng công nhân. Thông báo được dự định là cảnh báo cho hiệu ứng đó.


5
2018-01-15 14:44





Một trường hợp sử dụng là tạo một ajax gọi trước khi người dùng đóng cửa sổ hoặc rời khỏi trang. Điều này sẽ giống như xóa một số bản ghi tạm thời trong cơ sở dữ liệu trước khi người dùng có thể điều hướng đến một trang web khác hoặc đóng trình duyệt.

 $(window).unload(
        function(){
            $.ajax({
            url: 'your url',
            global: false,
            type: 'POST',
            data: {},
            async: false, //blocks window close
            success: function() {}
        });
    });

4
2017-12-18 20:45



Không có số lượng JavaScript sẽ ngừng đóng cửa sổ trình duyệt - jammykam


Đặt async thành false có nghĩa là các hướng dẫn sau yêu cầu ajax sẽ phải đợi yêu cầu hoàn tất. Dưới đây là một trong những trường hợp mà người ta phải đặt async thành false, để mã hoạt động đúng.

var phpData = (function get_php_data() {
  var php_data;
  $.ajax({
    url: "http://somesite/v1/api/get_php_data",
    async: false, 
    //very important: else php_data will be returned even before we get Json from the url
    dataType: 'json',
    success: function (json) {
      php_data = json;
    }
  });
  return php_data;
})();

Ví dụ trên giải thích rõ cách sử dụng async: false

Bằng cách đặt nó thành sai, chúng tôi đã đảm bảo rằng khi dữ liệu được truy xuất từ url , chỉ sau đó trả về php_data; được gọi là


1
2018-05-04 16:09