1

任何人都可以发布一个示例代码,其中有一个正在运行的计时器(javascript settimeout)并进行数据检索..

基本上我这个计时器所做的是显示新消息..

myFunction(param){

//data retrieval operation
//using getJSON.. call displaydata() base on param

settimeout("myFunction()", param, 1000);

}

function displaydata(param){

//processing
alert('test')}

我应该使用 getJSON 吗?我认为异步调用有问题..

4

2 回答 2

2

我注意到您需要在代码中修复两件事。

  • setTimeout()方法有一些不正确的参数
  • 您的异步getJSON调用会在下一次超时和方法的结果之间创建一个竞争条件getJSON。改为这样做:

.

function yourFunction(params) {  
    jQuery.getJSON("url", {data}, function(data, textStatus){
        // handle your JSON results

        // Call the timeout at the end of the AJAX response
        // This prevents your race condition
        setTimeout(function(){
            yourFunction(params);
        }, 1000);
    }
} 

setTimeout(function(){
    yourFunction(params);
}, 1000);
于 2009-11-03T03:06:47.390 回答
0

第一个参数应该是函数字面量或函数引用,第二个参数应该是毫秒。

setTimeout( function() {
    getData('param')
}, 1000);

function getData() {
     $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
        function(data){
          $.each(data.items, function(i,item){
            $("<img/>").attr("src", item.media.m).appendTo("body");
            if ( i == 3 ) return false;
          });
        });
}

在我的示例中,我没有使用实际参数,但您可以轻松地对其进行更新。另外我不确定你是否在轮询(这不做轮询/递归调用)。

于 2009-11-03T02:56:52.527 回答