Javascript 从jquery到angularjs

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

我使用以下格式从本地主机获取JSON对象。JSON非常复杂和冗长,因此使用jquery填充HTML变得越来越复杂

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);
  }