2014-12-17 3 views
3

Я изучаю angularjs.После преобразования xml в json невозможно получить доступ к данным

Когда я хочу, чтобы получить доступ к файлу XML, я не в состоянии сделать это, я использовал xml_strjson этот метод преобразования данных XML в JSON, но не может получить доступ в HTML файл вот мой код:

enter code here<!DOCTYPE html> 
<html ng-app=""> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"> </script> 
<script type="text/javascript" src="http://demos.amitavroy.com/learningci/assets /js/xml2json.js" charset="UTF-8"></script> 
    <script> 
     function customersController($scope, $http) { 
     $http.get("http://localhost:13087/Data.xml") 
     .success(function (response) { 
      $scope.lstComapanies = x2js.xml_str2json(response); 
      console.log($scope.lstComapanies); 

      alert(response); 
     }); 
    } 

</script> 
    <title></title> 
     </head> 
    <body ng-controller="customersController"> 
    <table> 
     <tbody> 
       <tr ng-repeat="CompanyModel in lstComapanies"> 
       <!-- $index for duplicate values --> 
        <td class="border"> 
         <label>{{ CompanyModel }}</label> 
       </td> 

      </tr> 
     </tbody> 
    </table> 

мои данные JSON

{ 
    "__cnt": 8, 
    "CompanyModel": [ 
     { 
      "__cnt": 7, 
      "BacklogSum": "646", 
      "BacklogSum_asArray": [ 
       "646" 
      ], 
      "BillingSum": "607", 
      "BillingSum_asArray": [ 
       "607" 
      ], 
      "BookingSum": "646", 
      "BookingSum_asArray": [ 
       "646" 
      ], 
      "CashflowSum": "$-4809038.45", 
      "CashflowSum_asArray": [ 
       "$-4809038.45" 
      ], 
      "LstCompanies": { 
       "__cnt": 1, 
       "_i:nil": "true" 
      }, 
      "LstCompanies_asArray": [ 
       { 
        "__cnt": 1, 
        "_i:nil": "true" 
       } 
      ], 
      "Name": "OPTERNA AM, INC. ", 
      "Name_asArray": [ 
       "OPTERNA AM, INC. " 
      ], 
      "Number": "2000", 
      "Number_asArray": [ 
       "2000" 
      ] 
     } 
    ], 
    "_xmlns:i": "http://www.w3.org/2001/XMLSchema-instance", 

} 
+0

Попробуйте разобрать JSON.parse (your_converted_data). –

ответ

3

Вам необходимо создать основной модуль для вашего приложения, а затем добавить к нему контроллер.

Во-первых, изменить сценарий к этому:

var myApp = angular.module('myApp', []); 

myApp.controller('customersController', ['$scope', '$http', 
function($scope, $http){ 
    $http.get("http://localhost:13087/Data.xml") 
     .success(function (response) { 
      $scope.lstComapanies = x2js.xml_str2json(response); 
      console.log($scope.lstComapanies); 

      alert(response); 
    }) 
}]); 

затем установить приложение и контроллер правильно

<body ng-app="myApp"> 
    <div ng-controller="customersController"> 
     <table> 
      .... etc 

также, как указывалось выше, вам нужно будет изменить нг-повтор.

<tr ng-repeat="objects in lstComapanies.CompanyModel"> 
+0

привет сожалею о том, что вы показываете пустую страницу, я модифицировал скрипт как заданный, но не изменял результат, но когда я проверяю с предупреждением, я могу видеть данные – user1983379

+0

@ user1983379, так как вы изменили имя ng-repeat на объекты, вы изменили привязку to {{objects}} – alsco77

+0

yes i изменено на user1983379

0

Это просто:

<tr ng-repeat="CompanyModel in lstComapanies.CompanyModel"> 

Посмотрите ваш JSON. Она начинается с объектом с двумя атрибутами: 1. ____cnt = 8 (звучит как кол) 2. CompanyModel = Массив объектов

Так ретранслятор ожидает массив, и вы дали ему объект. Но этот объект включает ваш массив.

JSON означает Java Script Obect Notation и когда вы разбираете JSON в JavaScript, он попадает в объект или массив. Таким образом, вы можете напрямую вступать в каждый ваш lstComapanies (должны быть lstCampanies?).

Если не работает сделать отверстие вещь:

  1. Модуль
  2. Контроллер определить прицел
  3. использовать контроллер и перебрать данные

    angular.module('myApp', []) 
    .controller('customersController', ['$scope', '$http', 
        $scope.lstComapanies = {}; 
        function($scope, $http){ 
        $http.get("http://localhost:13087/Data.xml") 
         .success(function (response) { 
         $scope.lstComapanies = JSON.parse(x2js.xml_str2json(response)); 
         console.log($scope.lstComapanies); 
    
         alert(response); 
        }) 
    }]); 
    
    <body ng-app="myApp"> 
        <div ng-controller="customersController"> 
        ... 
        <tr ng-repeat="CompanyModel in lstComapanies.CompanyModel"> 
         <td>{{ CompanyModel.__cnt }}</td> 
         <td>{{ CompanyModel.BacklogSum }}</td> 
         <td> 
         <span ng-repeat="sum in CompanyModel.BacklogSum_asArray">{{ sum }}</span> 
         </td> 
        </tr> 
        ... 
        </div> 
    

    ПРИМЕЧАНИЕ: JSON.parse() не существует во всех браузерах, см. здесь: Safely turning a JSON string into an object

Но нормально я бы на месте HTTP получить материал в заводском или услуг класса, который можно закачать к любому контроллеру, который необходим доступ к данным. Затем я бы обещал, что когда вы вернете желаемые данные по определенным функциям API, например getCompanies()

+0

hi rmertins ur solution show blank – user1983379

+0

Затем вам нужно добавить угловой модуль, как описано @Alex Scott. –

Смежные вопросы