2011-02-08 62 views
40

Làm cách nào tôi có thể gọi một Yêu cầu Ajax trong một Khoảng thời gian cụ thể? Tôi có nên sử dụng Trình cắm giờ hoặc jQuery có plugin không?Gọi jQuery Ajax Yêu cầu Mỗi Phút X

+2

Bạn có thể google this. http://stackoverflow.com/questions/4542863/jquery-ajax-call-with-timer – Zabba

+0

Bạn đã làm gì? – PinoyStackOverflower

Trả lời

119

Bạn có thể sử dụng javascript setInterval tích hợp sẵn.

var ajax_call = function() { 
    //your jQuery ajax code 
}; 

var interval = 1000 * 60 * X; // where X is your every X minutes 

setInterval(ajax_call, interval); 

hoặc nếu bạn là loại ngắn gọn hơn ...

setInterval(function() { 
    //your jQuery ajax code 
}, 1000 * 60 * X); // where X is your every X minutes 
3

Không Pugin cần .Bạn có thể chỉ sử dụng jquery.

Nếu bạn muốn thiết lập một cái gì đó trên một bộ đếm thời gian, bạn có thể sử dụng JavaScript của setTimeout hoặc setInterval phương pháp:

setTimeout (expression, timeout); 
setInterval (expression, interval) 

;

+1

setinterval thực sự là từ javascript không jquery. –

3

bạn có thể sử dụng setInterval() trong javascript

<script> 
//Call the yourAjaxCall() function every 1000 millisecond 
setInterval("yourAjaxCall()",1000); 
function yourAjaxCall(){...} 
</script> 
2

sử dụng jquery Every time Plugin .using này bạn có thể làm cuộc gọi ajax cho khoảng thời gian "X"

$("#select").everyTime(1000,function(i) { 
//ajax call 
} 

bạn cũng có thể sử dụng setInterval

+0

Liên kết đến _everytime_ bị hỏng ... – nbro

+0

liên kết bị hỏng và lợi thế của nó là gì, chúng ta không thể chỉ sử dụng setinterval? –

5

Một chút trễ nhưng tôi đã sử dụng phương pháp jQuery ajax. Nhưng tôi không muốn gửi một yêu cầu mỗi giây nếu tôi havent đã nhận được phản hồi từ yêu cầu cuối cùng, vì vậy tôi đã làm điều này.

function request(){ 
      if(response == true){ 
       // This makes it unable to send a new request 
       // unless you get response from last request 
       response = false; 
       var req = $.ajax({ 
        type:"post", 
        url:"request-handler.php", 
        data:{data:"Hello World"} 
       }); 

       req.done(function(){ 
        console.log("Request successful!"); 

        // This makes it able to send new request on the next interval 
        response = true; 
       }); 
      } 

      setTimeout(request(),1000); 
     } 

     request(); 
+0

Tại sao không chỉ thêm 'setTimeout (request(), 1000);' bên trong req.done và tránh sự cần thiết phải kiểm tra bool? – Wobbles

+0

Vâng, suy nghĩ tốt. Nhưng bool có thể là tuyệt vời để kiểm tra nếu yêu cầu đã đi về phía trước bất cứ nơi nào khác trong mã. Chúng tôi nói rằng bạn chỉ có thể nhấp vào nút gửi khi phản hồi đã trở lại, sau đó bạn có thể sử dụng bool đó để kiểm tra xem phản hồi có đến hay không. – linslusa

0

Tôi tìm thấy một plugin jquery rất tốt có thể làm giảm tuổi thọ của bạn bằng loại thao tác này. Bạn có thể thanh toán https://github.com/ocombe/jQuery-keepAlive.

$.fn.keepAlive({url: 'your-route/filename', timer: 'time'},  function(response) { 
     console.log(response); 
     });// 
Các vấn đề liên quan