2010-05-31 49 views

Trả lời

14

Giống như Obama sẽ nói: CÓ BẠN CÓ THỂ!

jQuery .ajax()

Thiết

async = false 

trong handler .ajax() sẽ làm các trick.

+0

cảm ơn bạn vì phản hồi cực nhanh :) – keshav84

+2

Chức năng này không còn được dùng như jQuery 1.8 http://api.jquery.com/jQuery.ajax/ – Doug

+1

Phương án thay thế được đề nghị là gì? –

3

Trong khi jQuery có thể thực hiện cuộc gọi AJAX đồng bộ bằng cách đặt thuộc tính đồng bộ: false, điều này làm cho trình duyệt bị treo cho đến khi AJAX hoàn tất. Sử dụng một thư viện kiểm soát dòng chảy như Frame.js cho phép bạn thực hiện cuộc gọi đồng bộ mà không cần gõ lên trình duyệt:

$.each(ajaxObjects, function(i, ajaxCall){ 
    Frame(function(next)){ // declare the callback next here 

     ajaxCall.complete = function(data){ 
      // do something with the data 
      next(); // go to the next ajax call 
     } 
     $.ajax(ajaxCall); 

    }); 
} 
Frame.init(); 

Đây là loạt các AJAX cuộc gọi sẽ được thực hiện theo thứ tự, mỗi chờ đợi trước để hoàn thành, mà không làm cho trình duyệt treo . Cũng có lợi ích bổ sung là dữ liệu trả về từ các cuộc gọi ajax theo thứ tự có thể dự đoán được, trái ngược với các cuộc gọi không đồng bộ trả về theo thứ tự ngẫu nhiên.

+0

Một điều tôi không rõ ràng về điều đó quan trọng đối với tôi: khi nào Frame.init() trả về câu trả lời của bạn? Trước, hoặc sau khi tất cả các cuộc gọi đó hoàn tất? –

+0

Frame.init chỉ đơn giản là nói với Frame rằng khi nó nhận được một công việc, nó sẽ chạy công việc. Trong Frame v2, nó đã được đổi tên thành Frame.start. Việc sử dụng thay thế sẽ là nếu bạn muốn thêm một loạt các thứ vào Frame que, nhưng không muốn Frame bắt đầu chạy các công việc nào. Khung sẽ đơn giản giữ tất cả các công việc cho đến khi .start() được gọi. – BishopZ

Các vấn đề liên quan