2015-09-18 62 views
0

有一個我正在設計的Web應用程序。我在前端使用了Java後端的AngularJS。該Web應用程序正在部署在war文件中,並被部署到本地JBoss服務器。我目前有一個Java類,它執行一系列計算,並每10秒將這些數據作爲JSON發送到客戶端。這有效,但我想用AJAX(?)更新包含這些數據的元素。JavaScript:定時器刷新同級別元素的內容

在Angular中,我有幾個$resource消耗Java RESTful API的服務。這是所有JSON數據,它是通過單個控制器傳播到視圖中的。然後我有一些由ng-repeat生成的HTML元素都具有相同的類。我想用這些類中的一個來觸發每隔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類更新元素的內容,還是隻用ID的工作嗎?
  2. 我應該使用AJAX刷新頁面嗎?
  3. 如果不是,那麼我將如何實現與Angular?
+0

笑納的答案,如果它幫助。 –

回答

1

從javascirpt執行同步網絡調用將阻止主線程,這可能會阻止您的用戶界面,因此不建議。回答你的問題。

  1. 當你使用angular時,你不應該使用class或id(使用選擇器)來訪問元素,這是我們用jQuery所做的。相反,你應該使用數據綁定。
  2. 你不需要AJAX來刷新頁面。
  3. 您可以使用現有的$resource來檢索數據。一旦你在控制器中有數據,保存在一個範圍變量中。然後,您可以使用angular-expression在HTML中使用相同的變量來更新數據。

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