javascript轮询时Html5数据属性不会更新

时间:2013-08-06 17:47:58

标签: javascript jquery ruby-on-rails

我正在查看后台进程的状态。我正在尝试使用HTML5数据属性将后台进程的:status(模型属性)传递给js轮询函数。后台作业完成后状态成功更新,但我的javascript未检索更新状态。

<div class="report" data-report-id="<%= @report.id %>" data-report-completed="<%= @report.completed? %>">
  <% if @report.completed? %>

我确定@report.completed?方法可以正常工作。这是我的javascript。访问data-report-completed属性不会返回更新后的状态。

$(document).ready(function() {
  if ($(".report-loading").length > 0) {
    showActivityIndicator();
    console.log("Loading...");
    setTimeout(checkReportStatus, 3000);
  }
});

function checkReportStatus() {
  var report_completed = $(".report").attr("data-report-completed");
  if (report_completed == true) {
    console.log("Completed");
    var report_id = $(".report").attr("data-report-id");
    location.reload();
  }
  else {
    console.log("In progress...");
    setTimeout(checkReportStatus, 3000);
  }
}

1 个答案:

答案 0 :(得分:1)

你正在比较一个布尔值但你应该在检查属性值时检查字符串值。尝试改变你的比较:

if (report_completed === 'true') {

如果您需要从服务器获取值以更新您的html,您可以执行以下ajax调用。:

function checkUpdated(){
   $.get('pathToCheckIfYourJobIsDone',function(isUpdated){ // isUpdated is what your server response
      if(isUpdated){
         $(".report").attr("data-report-completed",true);
         // do whatever else you want to do when it is complete.
      }else
      {
           setTimeout(checkUpdated,3000);
      }
   });
}