@g_s_e

В чем может быть проблема получения данных Yandex API через angular $http.jsonp?

Всем доброго времени суток! В angular'e я новичок и у меня возникла такая проблема. Пытаюсь получить данные о расписании движения поездов на станции таким образом:
rTApp.controller('welcomeController', [ 'Stations','$scope','$http',function(Stations, $scope, $http ){
    $scope.city = {name: "Moscow"};
    $scope.setCity = function(address){
        $http.get('http://maps.googleapis.com/maps/api/geocode/json', {params: {address: address}})
            .success(function(data){
                url = 'https://api.rasp.yandex.net/v1.0/nearest_stations/?&apikey={key_value}&lat='+data.results[0].geometry.location.lat + '&lng=' + data.results[0].geometry.location.lng+'&distance=50&lang=ru&transport_types=train&format=json&callback=JSON_CALLBACK';
                $http.jsonp(url).
                success(function(data, status, headers, config) {
                    console.log(data);
                });

на что получаю ответ Invalid callback name "angular.callbacks._0"
При попытки отправить запрос таким образом:
url = 'https://api.rasp.yandex.net/v1.0/nearest_stations/?&apikey={key_value}&lat='+data.results[0].geometry.location.lat + '&lng=' + data.results[0].geometry.location.lng+'&distance=50&lang=ru&transport_types=train&format=json';

Сервер возвращает данные, но на клиенте показывает:
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin is therefore not allowed access.
так же пробовал такой вариант:
function custom_callback(data) {
    console.log(data);
}
rTApp.controller('welcomeController', [ 'Stations','$scope','$http',function(Stations, $scope, $http ){...............
url = 'https://api.rasp.yandex.net/v1.0/nearest_stations/?&apikey={key_value}&lat='+data.results[0].geometry.location.lat + '&lng=' + data.results[0].geometry.location.lng+'&distance=50&lang=ru&transport_types=train&format=json&callback=custom_collback';
  $http.jsonp(url)

...............
}]);

Сервер отдает данные и передает их в метод custom_callback, но поскольку он находится вне контроллера отсутствует возможность нормальной обработки данных и передачи во вью.

Буду благодарен за любую помощь. Заранее спасибо.
  • Вопрос задан
  • 303 просмотра
Пригласить эксперта
Ответы на вопрос 2
Ну, если стандартный ангуляровский callback почему-то не работает - можно в свой custom_callback через замыкание засунуть какой-нибудь сервис или ещё что-то, куда вы хотите данные сохранить.
Ответ написан
Комментировать
@napa3um
Используйте JS-API вместо JSONP: https://tech.yandex.ru/maps/jsapi/ . Если же хочется именно через JSONP, то заталкивайте ваш калбэк в глобальную область видимости:
window.custom_callback = custom_callback;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы