Ajax响应需要时间来填充

时间:2010-12-28 14:13:20

标签: javascript ajax dojo

我有一个不归我所有的实用工具类。我正在调用该util类的方法之一,该方法调用一个ajax函数。并给我回复。

我需要根据响应对象做出决定。问题是响应对象需要一些时间来填充(mili seconds)。

var selector = dojo.byId("SelectorId");
var theChart = new chart( selector, 135, 92, style, frequency, time);

if(theChart.data ===null){
    console.log("No response");
}else{
    Console.log("Use response data");
}

chart( selector, 135, 92, style, frequency, time);

不归我所有。 chart()来自util类。

上面的代码段可以解决断点。但是当我删除断点时,它始终以“if”阻止开始。

如何解决此问题。

2 个答案:

答案 0 :(得分:1)

如果你使用 setTimeout ,它应该可以解决你的问题:

 var selector = dojo.byId("SelectorId");
 var theChart = new chart( selector, 135, 92, style, frequency, time);

 setTimeout(function(){
  if(theChart.data ===null){
   console.log("No response");
  }else{
   Console.log("Use response data");
  }
 }, 100);

或者,您可以使用 setInterval 。下面的示例检查变量avery 100msecs,并在N = 10次尝试后返回'false':

 var maxTries = 10;
 var checkFunction = function(){
  if(theChart.data === null){
   --maxTries;
  }else{
   Console.log("Use response data");
   clearTimeout(checkFunction);
   return;
  }
  if( 0 == maxTries ) {
   console.log("No response");
   clearTimeout(checkFunction);
  }
 } ;
 setTimeout(checkFunction, 100);

答案 1 :(得分:1)

图表对象应提供某种回调挂钩,以便在数据可用时通知您。

这样的东西
theChart.onData = function(data){ 
  console.log(data);
  // or 
  console.log(theChart.data); 
} 

如果没有,你必须使用超时来补充功能。由于您无法知道服务器是否需要一些时间来响应,因此您可能需要重复尝试。

这个(未经测试的)函数应调用内部函数,直到数据可用,然后调用提供的回调函数。

function chartdata(ch,cb){ 
  (function(){
    if(ch.data === null){
      window.setTimeout(arguments.callee, 100);
    } else {
      cb(ch);     
    }
  })();
}; 

你会这样使用它:

chartdata(new chart( selector, 135, 92, style, frequency, time), function(theChart){  
  console.log(theChart.data);
});

如果服务器根本没有响应,您可能需要添加中止条件。