【问题标题】:JQuery GetJSON inside SetTimeOut TimerSetTimeOut 定时器内的 JQuery GetJSON
【发布时间】:2017-04-06 05:51:14
【问题描述】:

任何人都可以发布一个示例代码,其中有一个正在运行的计时器(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 吗?我认为异步调用有问题..

【问题讨论】:

    标签: jquery settimeout getjson


    【解决方案1】:

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

    • 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);
    

    【讨论】:

      【解决方案2】:

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

      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;
                });
              });
      }
      

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

      【讨论】:

      • 回调数据有没有可能丢失?因为有时 settimeout 间隔在回调之前先出现..
      猜你喜欢
      • 1970-01-01
      • 2012-07-26
      • 2011-05-07
      • 1970-01-01
      • 2010-11-29
      • 2020-06-30
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多