【问题标题】:Google Visualization Query - Abort RequestGoogle 可视化查询 - 中止请求
【发布时间】:2014-07-01 15:39:34
【问题描述】:

我正在开发一个包含多个高强度 SQL 查询的界面,然后使用 google.visualization.Query 对象呈现当前通过 AJAX 调用的多个 Google 图表:

var query = new google.visualization.Query('/report.ashx');
query.send(callbackMethod);
//....
function callbackMethod(rs){
    var data = rs.getDataTable();
    var graph = new google.visualization.AreaChart(target_div);
    graph.draw(data);
}

由于可以动态过滤界面,我遇到了一个可以运行查询的场景,而用户可能会选择重新过滤并因此重新查询数据源。如果第一个查询仍在运行并且第二个查询在第一个查询之前开始并返回,那么图表将被绘制得很好。但是,当第一个查询最终完成时,它可能会用旧数据完全覆盖图表,而忽略当前的过滤器。

我已经读到有能力传递一个 jQuery AJAX 对象,它公开了一个 XHR 对象,允许我在 XHR 上调用 .abort() 来取消请求(尽管这仍然会在服务器上处理,但这是我愿意接受的打击)。不幸的是,我找不到这方面的例子,而且谷歌文档在这方面帮助不大。有没有人遇到过同样的情况,如果有,他们解决了问题吗?

干杯,

克里斯。

【问题讨论】:

  • 或者将请求时间戳传递给onSuccess,数据过期不更新图表?
  • "report.ashx" 以以下格式返回数据: google.visualization.Query.setResponse({"version":"0.6","re​​qId":"22"... 所以不确定我如何将时间戳与此进行比较。

标签: javascript ajax google-visualization google-query-language


【解决方案1】:

您可以将callbackMethod 包装在高阶函数中以跟踪请求时间,并使用query.send(callback()) 而不是query.send(callbackMethod)

var mostRecentReqTime;
var callback = function() {
  var reqTime = Date();
  return function() {
    if (reqTime < mostRecentReqTime) return;
    var data = rs.getDataTable();
    var graph = new google.visualization.AreaChart(target_div);
    graph.draw(data);
    mostRecentReqTime = reqTime;
  };
};

【讨论】:

  • 感谢@Fabricator,我会牢记这一点,但是我真的在寻求一个允许完全中止请求的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
相关资源
最近更新 更多