JavaScript:定时刷新相同class元素的内容

JavaScript: Timer to refresh content of elements with same class

我正在设计一个网络应用程序。我在前端使用 AngularJS,后端使用 Java。 Web 应用程序正在 war 文件中部署到本地 JBoss 服务器。我目前有一个 Java class 执行一系列计算并每 10 秒将数据作为 JSON 发送给客户端。这可行,但我想用 AJAX(?) 更新包含此数据的元素。

在 Angular 中,我有几个 $resource 服务使用 Java RESTful API。这是所有 JSON 数据,这些数据由单个控制器传播到视图中。然后我有一些由 ng-repeat 生成的 HTML 元素,它们都具有相同的 classes。我想使用这些 classes 之一来每 10 秒触发一次对所有元素的刷新。这是我正在谈论的 ng-repeat 的片段:

<div ng-repeat="mq in mqDepth">
     <progressbar class="mq" max="max" value="dynamic" ng-init="dynamic=mq.currentDepth" type="info>
        <span>
            {{dynamic}} / {{max}}
        </span>
     </progressbar>
</div>

在上面的代码片段中,正在更新的数据是 mq.currentDepth

这是我用来刷新的代码:

function refreshQueue() {
    $('.mq').load('', function() {
        $(this).unwrap();
    });
}

refreshQueue();
setInterval(function() {
    refreshQueue();
}, 10000);

我收到一条警告,基本上说明了我正在实施的方式 AJAX 会破坏我的用户界面,这是在一系列更新之后发生的。

Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/.

我有几个问题

  1. 你能更新 AJAX 中带有 class 的元素的内容吗?还是说这只适用于 ID?
  2. 我应该使用 AJAX 刷新页面吗?
  3. 如果没有,那么我将如何用 Angular 实现它?

从 javascirpt 进行同步网络调用会阻塞主线程,这可能会阻塞您的 UI,因此不建议这样做。回答你的问题。

  1. 当您使用 angular 时,您不应使用 class 或 id(使用选择器)访问元素,就像我们使用 jQuery 时那样。相反,您应该使用数据绑定。
  2. 您不需要AJAX刷新页面。
  3. 您可以使用现有的 $resource 来检索数据。在控制器中获得数据后,将其保存在范围变量中。然后,您可以使用 angular 表达式在 HTML 中使用相同的变量来更新数据。

    $scope.mqDepth = MqDepth.get({ id: id });