2012-02-07 28 views
6

Điều tôi đang cố gắng đạt được là dữ liệu ban đầu sẽ được tải và sau đó được cập nhật 10 phút một lần bằng cùng một chức năng.Sử dụng setInterval trong JavaScript mà không sử dụng hàm nội tuyến, ẩn danh

xem xét mã này:

var updateNamespace = (function() { 
    var object = '#updates', 
    load = 'loader'; 

    return { 
     update: function() { 
      $(object).addClass(load).load('update.php', function(reponse, status, xhr) { 
       if (status == 'error') { 
        $(this).html('<li>Sorry but there was an error in loading the news &amp; updates.</li>'); 
       } 
       $(this).removeClass(load); 
      }); 
     } 
    } 
})(); 

setInterval(updateNamespace.update(), 600000); 

tôi nhận được lỗi này:

useless setInterval call (missing quotes around argument?) 

Làm thế nào tôi có thể sửa lỗi này?

Cách viết văn bản này tốt hơn và thanh lịch hơn hoặc sử dụng chức năng setInterval là gì?

Cảm ơn.

Trả lời

14

Bạn cần phải sử dụng:

setInterval(updateNamespace.update, 600000); 

(. Chú ý các nhà điều hành loại bỏ gọi())

Mã của bạn, như được viết, thực sự sẽ gọi updateNamespace.update khi bạn gọi setInterval. Do đó,

setInterval(updateNamespace.update(), 600000); 

đánh giá để

setInterval(undefined, 600000); 

Bạn muốn vượt qua setInterval một tham chiếu đến chức năng của bạn, không phải là kết quả của việc gọi của nó.

+0

Câu trả lời hay! Trong trường hợp của tôi, tôi phải gửi các tham số đến hàm được gọi bởi setInterval. Sau đó, tôi đặt chúng vào một phạm vi lớn hơn (không phải là suy nghĩ toàn cầu). Nó hoạt động như một sự quyến rũ! –

-6

thử setInterval('updateNamespace.update()', 600000);

Lưu ý các dấu ngoặc kép quanh chức năng gọi

0

Đối với một số lý do Javascript muốn nhìn thấy dấu ngoặc kép quanh phương pháp gọi điện thoại của bạn. Như thể nó là một sợi dây. Không chắc chắn tại sao nó hoạt động như thế. Matt H. cho biết nếu bạn vượt qua một tham chiếu sẽ khắc phục được sự cố. Nhưng nó sẽ không hoạt động nếu bạn cần phải vượt qua trong một cuộc tranh cãi. Vì vậy, tôi không biết có lẽ JavaScript chỉ cần lưu phương pháp như một chuỗi và sau đó coverts để trở lại bình thường khi nó được sử dụng.

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