Javascript 从jquery到angularjs
我使用以下格式从本地主机获取JSON对象。JSON非常复杂和冗长,因此使用jquery填充HTML变得越来越复杂Javascript 从jquery到angularjs,javascript,jquery,json,angularjs,Javascript,Jquery,Json,Angularjs,我使用以下格式从本地主机获取JSON对象。JSON非常复杂和冗长,因此使用jquery填充HTML变得越来越复杂 function processmsg(msg) { var jobj = JSON.parse(msg); if (typeof jobj === 'object') { // Parse the JSON } document.getElementById("m
function processmsg(msg) {
var jobj = JSON.parse(msg);
if (typeof jobj === 'object')
{
// Parse the JSON
}
document.getElementById("messages").innerHTML = globalTag;
}
}
function waitForMsg() {
$.ajax({
type: "GET",
url: "1.json",
cache: false,
timeout: 50000,
success: function (data) {
processmsg(data);
if (!data) {
setTimeout(
waitForMsg,
1000
);
};
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
setTimeout(waitForMsg, 15000);
processmsg("error");
}
});
};
$(document).ready(function () {
waitForMsg();
processmsg("loading");
});
我想使用类似{{jobj.entries}的格式。像这样的。这可以在angularJS上完成。你们能建议我怎么做同样的事情吗
我希望每1分钟查询一次JSON,当找到数据时,我希望取消间隔。我不知道用angularjs怎么做
=========================更新================
我得到了下面的代码片段。它工作正常,但是一旦获得json对象,如何停止url查询
var app = angular.module('urlanalyzer', []);
app.controller('jsonController', function($scope, $http) {
$scope.getData = function(){
var url = "{% static "" %}tmp/{{url_hash}}/{{url_json}}";
$http.get(url)
.success(function(data, status, headers, config) {
console.log(data);
});
};
if (!$scope.data){
setInterval($scope.getData, 2000);
}
这里的问题是json对象仅在3秒后可用。假设您在名为
data
的范围变量中存储了以下json数据:
$scope.data = {
"array": [
1,
2,
3
],
"boolean": true,
"null": null,
"number": 123,
"object": {
"a": "b",
"c": "d",
"e": "f"
},
"string": "Hello World"
}
然后按照以下方式编写HTML:
<div>
Boolean: {{data.boolean}}
</div>
<div>
Number: {{data.number * 2}}
</div>
<div>
Array:
<p ng-repeat="(key, value) in data.object"> {{key}} : {{value}}</p>
</div>
Another way to bind <div ng-bind="data.string"></div>
HTML:
{{errorMessage}}
//您可以使用角度方向绑定数据的任何属性
//查看ng bing、ng if等指令
{{myData.name}}。。。
希望能有所帮助
if (!$scope.data){
setInterval($scope.getData, 2000);
}
由于未设置$scope.data
,它将继续调用请求(因为您没有在任何地方设置$scope.data
)
编辑:另外,使用angularjs
$interval
,因为这是使用setInterval
的角度方式,并且它跟踪$digest
循环在启动应用程序之前应该使用angular.js。阅读文档,尝试创建简单应用程序,hello world应用程序,使用$http、$timeout、依赖项注入等。我认为现在不是使用angular.jsI开始开发应用程序的正确时间。我得到了下面的代码片段。添加到描述中。为什么需要使用interval?Angular.js有自己的$interval服务,请看,另外,您应该在success函数中设置$scope.data=data并取消间隔承诺如果成功问题是,我有一个jquery。我无法将json数据传递到Angular$scope。然后使用Angular的$http
服务进行AJAX调用。这就是我需要的帮助。我上面提到的角度编码是有效的。但它一直在质疑。一旦数据可用,我需要停止它。我不知道怎么做。由于某种原因,我得到了这个错误(未捕获错误:[$injector:modulerr]…ogleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.3.8%2Fangular.min.js%3A17%3A350)data.data?数据。数据:数据这是什么意思?循环按预期终止。非常感谢。有时服务器响应预期数据属性为子属性。只要看看他是不是孩子。这完全取决于您的数据结构。
var app = angular.module('urlanalyzer', []);
app.controller('jsonController', ['$scope','$http','$timeout',function($scope, $http, $timeout) {
$scope.getData = function(){
var url = "{% static "" %}tmp/{{url_hash}}/{{url_json}}";
$http.get(url)
.success(function(data, status, headers, config) {
if(!data)
$timeout(function(){
$scope.getData()
}, 2000)
else{
$scope.myData = data.data? data.data:data;
$scope.showError = false;
}
})
.error(function(msg) {
$timeout(function(){
$scope.getData()
}, 2000)
$scope.processMessage(msg)
});
};
$scope.processMessage = function(msg){
if(angular.isString(msg))
$scope.errorMessage = msg;
else if(angular.isObject(msg)){
$scope.errorMessage = msg.message // the property you want;
}
$scope.showError = true;
}
$scope.getData();
}])
<div ng-controller="jsonController">
<div ng-show="showError">
{{errorMessage}}
</div>
<div id="myDatacontainer">
//you can bind any propery of your data by using angular direvtives
//look at ng-bing, ng-if etc. directives
{{myData.name}} ...
</div>
</div>
if (!$scope.data){
setInterval($scope.getData, 2000);
}