Я новичок в JSON, а также в AngularJS. Я пытаюсь получить доступ к элементам данных в глубоко вложенном удаленном json-файле. Мне удастся отобразить все результаты JSON в моем представлении. Однако я не могу настроить таргетинг на элементы, находящиеся в массиве внутри JSON. Это от Yahoo Currency.AngularJS рендеринг из глубоко вложенного jsonp
Это мой контроллер и вид, что делает весь файл в формате JSON:
контроллер
var app = angular.module('app', []);
app.controller('DataCtrl', function ($scope, $http) {
$http.jsonp('https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20json%20where%20url%3D%22http%3A%2F%2Ffinance.yahoo.com%2Fwebservice%2Fv1%2Fsymbols%2Fallcurrencies%2Fquote%3Fformat%3Djson%22&format=jsonp&callback=JSON_CALLBACK').success(function (data) {
$scope.data = data;
});
});
вид
<!doctype html>
<html ng-app="app" >
<head>
<meta charset="utf-8">
<title>LIVE</title>
<!-- <link rel="stylesheet" href="style.css"> -->
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="DataCtrl">
<h1>Live from JSON feed</h1>
<ul>
<li ng-repeat="row in data">
{{ data }}
</li>
</ul>
</body>
</html>
Я пытался писать контроллер, как это:
var app = angular.module('app', []);
app.controller('DataCtrl', function ($scope, $http) {
$http.jsonp('https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20json%20where%20url%3D%22http%3A%2F%2Ffinance.yahoo.com%2Fwebservice%2Fv1%2Fsymbols%2Fallcurrencies%2Fquote%3Fformat%3Djson%22&format=jsonp&callback=JSON_CALLBACK').success(function (data) {
var pair = { name };
// $scope.data = data;
if(data) {
if (data.results) {
pair.name = data.results.list.resources[0].resource.fields.name;
}
}
});
});
Но это не работает. Вот JSON (частично) .. Я пытаюсь получить доступ к «имя», «цена» и «utctimestamp» поля для каждого ресурса:
{
"query": {
"count": 1,
"created": "2015-11-07T05:42:03Z",
"lang": "en-US",
"diagnostics": {
"publiclyCallable": "true",
"url": {
"execution-start-time": "0",
"execution-stop-time": "23",
"execution-time": "23",
"content": "http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote?format=json"
},
"user-time": "25",
"service-time": "23",
"build-version": "0.2.311"
},
"results": {
"list": {
"meta": {
"type": "resource-list",
"start": "0",
"count": "173"
},
"resources": [
{
"resource": {
"classname": "Quote",
"fields": {
"name": "USD/KRW",
"price": "1152.994995",
"symbol": "KRW=X",
"ts": "1446874620",
"type": "currency",
"utctime": "2015-11-07T05:37:00+0000",
"volume": "0"
}
}
},
{
"resource": {
"classname": "Quote",
"fields": {
"name": "SILVER 1 OZ 999 NY",
"price": "0.068046",
"symbol": "XAG=X",
"ts": "1446850711",
"type": "currency",
"utctime": "2015-11-06T22:58:31+0000",
"volume": "100"
}
}
},
{
"resource": {
"classname": "Quote",
"fields": {
"name": "USD/VND",
"price": "22364.000000",
"symbol": "VND=X",
"ts": "1446874620",
"type": "currency",
"utctime": "2015-11-07T05:37:00+0000",
"volume": "0"
}
}
},
...
Для чего это стоит, JSONP, кажется, возвращать какие-то XML выглядящих вещей, когда я добавляю в обратного вызова = JSON_CALLBACK к URL, например:
JSON_CALLBACK({"query":{"count":"1","created":"2015-11-07T16:08:29Z","lang":"en-US"},"results":["<list><meta><type>resource-list</type><start>0</start><count>173</count></meta><resources><resource><classname>Quote</classname><fields><name>USD/KRW</name><price>1152.994995</price><symbol>KRW=X</symbol><ts>1446900900</ts><type>currency</type><utctime>2015-11-07T12:55:00+0000</utctime><volume>0</volume></fields></resource></resources><resources><resource><classname>Quote</classname><fields><name>SILVER 1 OZ 999 NY</name><price>0.068046</price><symbol>XAG=X</symbol><ts>1446850711</ts><type>currency</type><utctime>2015-11-06T22:58:31+0000</utctime><volume>100</volume></fields></resource></resources><resources><resource>
...
есть проблема с тем, как я использую JSONP? Я получаю набор данных, отображаемый в моем представлении (см. Выше), но все это в фанк-синтаксисе xml. Как перехватить 3 значения, которые мне нужны, от массива и рендеринга в <ul>
??
Попробуйте использовать отладчик браузера или войдите, чтобы увидеть, если вы получите ответ правильно – Dvir
@Dvir Благодарю. Контроллер, который сбрасывает весь XML-материал, не исключает никаких исключений. Когда я пытаюсь указать поле (выше), я получаю следующую ошибку: 'TypeError: Невозможно прочитать ресурсы ресурсов 'undefined at app.js: 9 at angular.js: 8950 at offferred.promise.then. wrappedCallback (angular.js: 6846) at angular.js: 6883 at Object. $ get.Scope. $ eval (angular.js: 8057) at Object. $ get.Scope. $ digest (angular.js: 7922) на объекте $ get.Scope $ применяется (angular.js:.. 8143) на проделанном (angular.js: 9170) на completeRequest (angular.js: 9333) на angular.js: 9261' –
После проверьте, добавлены ли data.results console.log (data.results) – Dvir