2012-01-04 33 views
6

Tôi muốn định kỳ truy vấn tập lệnh PHP cho thư mới. Để làm như vậy, tôi đang sử dụng hàm setInterval() và AJAX.setInterval() chỉ chạy chức năng một lần

$(document).ready(function(){ 

    var queryInterval = 1000; /* How fast we query for new messages */ 

    setInterval(getMessages(), queryInterval); 

    function getMessages() { 
     console.log("tick"); 
    } 

}); 

Tuy nhiên, khi tôi xem bảng điều khiển Javascript, tôi chỉ thấy "đánh dấu" một lần. Tôi đã chắc chắn rằng giao diện điều khiển không bỏ qua bất kỳ bản ghi nhiều hơn các chuỗi cùng, do đó, nếu mã đã hoạt động đúng, nó sẽ hiển thị "đánh dấu" trong giao diện điều khiển mỗi giây.

Bất kỳ ai biết điều gì có thể xảy ra ở đây?

+2

đã có một câu hỏi khác chỉ như thế này một giờ trước. –

+0

getMessages() phải là getMessages – georg

+1

@ 32bitkid: Các câu hỏi về 'setTimout' và' setInterval' khá phổ biến. – Ivan

Trả lời

23

Thay đổi:

setInterval(getMessages(), queryInterval); 

Để:

setInterval(getMessages, queryInterval); 
+0

hoàn hảo .... !!!! –

+0

@qwertymk nhưng tôi muốn chuyển một đối số cho hàm đó, tôi phải làm gì this.intervall = setInterval (window.External (this), intervally); Hãy gửi HELP –

+2

@JamilHneini như vậy: 'setInterval (function() {getMessages (arg)}, queryInterval); ' – qwertymk

1

Tháo () sau getMessage

1

này cuộc gọigetMessages, không schedules nào. Xóa dấu ngoặc đơn.

setInterval(getMessages(), queryInterval); 

setInterval(getMessages, queryInterval); 
8

Thực tế, setInterval không hoạt động getMessages ở tất cả (thậm chí không một lần). setInterval mong muốn một tham chiếu cho một hàm, nhưng bạn đang thực hiện chức năng getMessagesngay lập tức và chuyển giá trị trả lại của nó tới setInterval (là undefined). Đó là những gì các parens sau khi getMessage làm.

Vượt qua một tham chiếu đến setInterval như thế này:

setInterval(getMessages, queryInterval); 

Nếu đây là nơi duy nhất mà getMessages được sử dụng, sau đó bạn cũng có thể viết nó như thế này:

setInterval(function() { 
    console.log("tick"); 
}, queryInterval); 
+0

@qwertymk chắc chắn đúng nhưng +1 cho điều này vì nó giải thích rõ hơn cách setInterval hoạt động dưới mui xe. – jsh

+0

@jsh - Phải, những gì tôi không thích về câu trả lời giống như câu trả lời được chấp nhận là, trong khi chính xác, nó không dạy nhiều. Biết được sự khác biệt giữa việc đề cập đến một hàm so với thực thi nó là một phần rất cơ bản, rất cơ bản của ngôn ngữ. –

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