0

我正在轮询后台进程的状态。我正在尝试使用 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);
  }
}
4

1 回答 1

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);
      }
   });
}
于 2013-08-06T17:52:04.753 回答