Я пытаюсь использовать длинный опрос в приложении angularjs. У меня есть длинный опрос в контроллере, который обновляет переменную области, на которую есть ссылка в представлении. Когда я просматриваю код, происходит опрос и возвращаются ожидаемые данные, но представление никогда не обновляется.
Longpolltest.js
var myApp = angular.module('myApp', []);
myApp.controller('MyController', function($scope, $timeout) {
$scope.value = 1;
function poll() {
var d = new Date();
var n = d.getTime();
$scope.value++;
$.ajax({
type: 'GET',
url: '/gs/async?millis=' + n,
contentType: "application/json; charset=utf-8",
async: true,
cache: false,
success: function(data) {
var obj = jQuery.parseJSON(data);
if (obj.type == 'ServerTime')
$scope.myTime = object.Data.Time;
setTimeout("poll()", 1000);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("error: " + textStatus + " " + errorThrown);
setTimeout("poll()", 10000);
}
});
}
poll();
});
Longpolltest.html
<!DOCTYPE html>
<html>
<head lang="en">
<!-- jQuery JavaScript -->
<script src="js/ext/jquery-1.12.0.min.js"></script>
<!-- angular library -->
<script src="js/ext/angular/angular.min.js"></script>
<script src="js/ext/angular/angular-route.min.js"></script>
<script src="js/longpolltest.js"></script>
<meta charset="UTF-8">
<title>Long poll test</title>
</head>
<body ng-app="myApp">
<div>
<div ng-controller="MyController">
<p>
Time: {{myTime}}
Poll#: {{value}}
</p>
</div>
</div>
</body>
Приветствуются любые идеи, почему представление не обновляется.
Заранее спасибо.
2 ответа
Несколько общих советов:
- не используйте метод jquery http. Вам следует предпочесть услугу $ http angular.
- не используйте функцию тайм-аута. Вы должны предпочесть услугу $ timeout angular.
- не вызывайте удаленные службы http внутри вашего контроллера. Вам следует создать специальный сервис.
Дальнейшее улучшение может заключаться в использовании службы $ interval.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.
$scope.$apply()
везде, где вы обновляете$scope.myTime
в функции ajax$http
для запроса ajax, я также вижу там использованиеsetTimeout
(вместо$timeout
/$interval
) - цикл дайджеста "не знает" "об этих изменениях, чтобы мнение не изменилось$http
и$timeout
. проблема в том, что это происходит за пределами области действия angulars, поэтому он не знает, что ему нужно обновлять привязки. Вы случайно не применяете angular к приложению на основе jquery?