2011-08-16 31 views
7

Tôi đang tương tác với một API cho phép một hành động trong mỗi 5 giây. Tuy nhiên, tôi muốn đảm bảo tất cả các yêu cầu kết thúc với máy chủ lưu trữ. Làm thế nào tôi có thể xếp hàng và điều tiết các yêu cầu được thực hiện đối với một API bằng cách sử dụng .ajax()?jQuery điều chỉnh và xếp hàng các yêu cầu AJAX

Nhiều nghĩa vụ!

Trả lời

9

Bạn có thể làm một cái gì đó dọc theo những dòng

var requests = []; 

setInterval(function() { 
    if(requests.length > 0) { 
     var request = requests.pop(); 
     if(typeof request === "function") { 
      request(); 
     } 
    } 
}, 5000); 

// then anywhere you need to make an ajax request 
requests.push(function() { 
    // ajax request here 
    $.ajax({ 
     url: "/foo", // some variable from outer scope 
     success: function(a,b,c) { 
      // handle it 
     } 
    }); 
}); 
1

Tôi rất muốn giới thiệu plugin này cho throttling yêu cầu Ajax: http://benalman.com/projects/jquery-throttle-debounce-plugin/

+0

Điều này không đảm bảo rằng tất cả các yêu cầu thực sự được thực hiện - nó chỉ giảm các cuộc gọi chức năng nếu chúng được thực hiện quá thường xuyên. – Gordon

-2

Nếu bạn muốn đảm bảo bất cứ điều gì sau đó bạn muốn tốt nhất có được một phương tiện khác hơn internet - đó là vốn không đáng tin cậy. Dù sao, để thử để đảm bảo, bạn có thể sử dụng phương thức Javascript setTimeout để bắt đầu cuộc gọi sau này.

Ngoài ra, nếu bạn không muốn sử dụng bất kỳ tài nguyên bên thứ ba nào khác, bạn có thể xem xét phương thức delay được jQuery hiển thị.

+3

Đây là một ý kiến ​​không được chứng minh. Truyền tải dữ liệu đáng tin cậy qua internet thật là lộng lẫy. – Konrads

3

jQuery có một .delay() và giao diện tôi đề nghị bạn kiểm và đọc về.

+0

delay() và queue() chỉ áp dụng cho hoạt ảnh, sử dụng hàng đợi hiệu ứng. Chúng sẽ không hữu ích cho việc trì hoãn AJAX. – thenickdude

+1

@Lamah Không đúng, '.delay()' và '.queue()' có thể được sử dụng cho hàng đợi của riêng bạn (hoặc hàng đợi 'fx' mặc định, được sử dụng cho hoạt ảnh). Bất kỳ chức năng chung nào cũng có thể được thêm vào hàng đợi được đặt tên tùy ý. – Chad

+0

Bạn hoàn toàn đúng, rõ ràng tôi cần phải tìm hiểu cách đọc tài liệu chặt chẽ hơn! – thenickdude

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