2013-10-01 22 views
11

Tôi có câu hỏi về cuộc gọi AJAX trong một khoảng thời gian. Và tại sao nó không hoạt động, hoặc làm việc theo cách nó hoạt động.jQuery AJAX với khoảng thời gian

tôi có mã này (cái này không hoạt động)

setInterval($.ajax({ 
    //Place code here 
}), 2000); 

nhưng sau đó tôi thực hiện nó theo cách này

setInterval(function() { 
    $.ajax({ 
    //Do ajax stuff here 
    }); 
}, 2000); 

Bây giờ nó hoạt động, nhưng với tôi điều này có vẻ như tôi chỉ làm cho một hàm ẩn danh phụ.

+2

Bạn cần cung cấp chức năng được thực hiện trên mỗi khoảng thời gian. '$ .ajax' không trả về một hàm, do đó nó không hoạt động. –

+0

Câu hỏi hay @Rob! Hy vọng rằng các chỉnh sửa của tôi sẽ giúp bạn hiểu việc sử dụng đúng cách markdown :) Có một [meta post] (http://meta.stackexchange.com/questions/3122/formatting-sandbox) đó là một sandbox chuyên dụng để chơi với bài đăng định dạng - có lẽ điều đó cũng sẽ giúp bạn làm quen với việc đánh dấu. – Lix

+2

@Lix cảm ơn chỉnh sửa :) –

Trả lời

11

setInterval yêu cầu một hàm hoặc mã thực thi ở định dạng chuỗi.

Cuộc gọi đầu tiên sẽ hoạt động khi được đặt trong chuỗi.

setInterval('$.ajax({ //Place code here })', 2000); 

Sử dụng cú pháp này không được khuyến khích vì những lý do tương tự như sử dụng eval.

setInterval cũng có thể lấy danh sách tùy chọn tham số. Bạn có thể tận dụng lợi thế của thực tế này và sử dụng một cái gì đó như thế này:

setInterval($.ajax/*a reference to the ajax function*/, 
2000, {url: 'someurl', success: onSuccess, error: onError}/*args passed to $.ajax*/ 
); 

Lưu ý rằng điều này sẽ không hoạt động cho các phương pháp đối tượng sử dụng this để xác định bối cảnh, như giá trị của this sẽ bị ràng buộc để window. Đó là, sau đây sẽ không hoạt động:

setTimeout($('h1').css, 1000, {'color': 'red'}); 
+1

Bạn có thể thay đổi mẫu mã để nó không sử dụng 'eval' không? Tôi ổn với việc giữ tuyên bố từ chối trách nhiệm. – Halcyon

+0

@FritsvanCampen, nhưng bro, đó là mã ví dụ duy nhất trong bài đăng của tôi. –

+0

Cảm ơn bạn đã trả lời :) –

3

setInterval đòi hỏi một chức năng như là đối số đầu tiên (Reference) và đó là lý do tại sao setInterval($.ajax({ //Place code here }), 2000); không hoạt động, vì $.ajax hàm trả về một jQuery XMLHttpRequest object(Reference)

setInterval(function() { $.ajax({ //Do ajax stuff here }); }, 2000); sẽ tạo các thực sự là một chức năng ẩn danh nhưng là cần thiết trừ khi bạn trích dẫn mã của bạn để làm cho nó là string.

+0

Cảm ơn bạn đã trả lời :) –

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