2015-04-02 3 views
2

Я новичок в Angular, а также относительно новичок в формате JSONP. В моем коде, я создал фабрику, чтобы прочитать в файле JSONP - и я получаю обратно переменные данные, как данные JSONP правильноРазбор файла JSONP в AngularJS

$http.get('someJSONFile').success(function(data){ 
    console.log(data); 
}); 

Бревно консоли возвращает мне следующее:

states([{"code":"AL","name":"Alabama"},{"code":"AK","name":"Alaska"},{"code":"AZ","name":"Arizona"},{"code":"AR","name":"Arkansas"},{"code":"CA","name":"California"},{"code":"CO","name":"Colorado"},{"code":"CT","name":"Connecticut"},{"code":"DE","name":"Delaware"}]) 

Итак - я застрял в том, что теперь делать. У меня есть объект данных, содержащий функцию. Мне нужно разобрать JSON из этой функции, но не уверен, как это сделать.

Я прочитал в других местах, которые мне нужно объявить функцию где-то в моем контроллере или на заводе под названием

function states(results) 
{ 
    // what is in results should be the JSON data I crave 
} 

Но даже если я сделаю это, я не думаю, что когда-либо выполняет - так я не знаю, что я должен сделать в этот момент, чтобы получить данные JSON в объект, который я могу использовать.

Полный файл Я пытаюсь разобрать это http://massachusettswebdesigns.com/states.json

Любая помощь приветствуется!

+0

Да, я думаю, вы можете просто позвонить 'попробовать {Eval (данные)} поймать (е) {}', а затем в вашем 'states' функции, бросить в' console.log (результаты) 'чтобы увидеть, что происходит. –

ответ

1

Угловой $http сервис предоставляет method для использования конечных точек JSONP. В вашем случае это должно работать:

$http.jsonp('someJSONFile').then(function(data) { 
    console.log(data) 
}); 

За сцену, Угловой создает глобально доступную функцию, которая будет получать данные, анализировать и передавать дальше, так что вам не нужно беспокоиться о создании функций самостоятельно.

+0

ОК, теперь я получаю сообщение об ошибке, что состояния не определены – Waterskier19

+0

Вот этот файл, который мне нужно проанализировать - http://massachusettswebdesigns.com/states.json – Waterskier19

+0

Это ваш сервис? На самом деле это не JSONP, вы не должны жестко закодировать функцию 'states' в ответ. Вместо этого вы должны взять любой параметр GET для обратного вызова из клиента и обернуть его данными JSON. – dfsq

0

То, что выглядит, как вы пытаетесь сделать, это стандарт JSON не JSONP, JSONP потребует обратного вызова и требуется только при получении данных из другого домена, то есть службы API

Также выход журнала консоли вы даете, недействительный JSON.

//init app 
var app = angular.module('MyApp',[]); 

//setup a factory for the data handling 

app.factory("Data",function($http){ 
return { 

    getData:function(type){ 

    return $http.get(type). 
     then(function(result) { 
      return result.data; 
     }); 
    } 
} 
}); 

//in a controller 'call' the factory for the data 

app.controller('main', function main($scope, Data) { 

//other stuff 

Data.getData('someJSONFile').then(function (data) { 
    $scope.jsonData = JSON.parse(data); 
}); 

//other stuff 
}); 
+0

ОК, это привело меня к тому, что я получил заголовок No 'Access-Control-Allow-Origin', который присутствует на запрошенном ресурсе, ошибке. Мне удалось обойти это, используя плагин для Chrome, который позволяет мне переписать ошибку перекрестного происхождения. Но теперь, когда я разбираю файл, я получаю сообщение об ошибке SyntaxError: Unexpected token s, когда он пытается проанализировать состояние. Файл, который я пытаюсь проанализировать, это http://massachusettswebdesigns.com/states.json – Waterskier19

+0

В зависимости от формата данных вам может не понадобиться его разбор, т. Е. Если не строка, поэтому измените строку $ scope.jsonData = JSON.parse (данные); to $ scope.jsonData = данные; –

0

Так что моя ошибка была глупой. Файл JSON давал мне имя пользовательского обратного вызова, который я должен был определить. Как только я это сделал, все сработало. , , , Вот код

angular.module('locationApp') 
    .controller('MainCtrl', ['$scope', '$http', function ($scope, $http) { 


    $scope.states = []; 
    $scope.cities = []; 


    // Function for the States callback on the JSON files provided 
    window.states = function (data) 
    { 
     $scope.states = data; 
    }; 

    // Get the State JSON file. 
    $http.jsonp('http://locationinc-mapping-demo.herokuapp.com/states.json'); 


}]) // end of MainCtrl 
Смежные вопросы