2013-07-07 3 views
0

Как разобрать в $ из ответов HTTP JSON в AngularJS?

Попытка захватить результаты поиска YouTube без JQuery:

$http.get('http://gdata.youtube.com/feeds/api/videos/-/chocolate?alt=json&orderby=published') 
    .success(function (data) { 
     $scope.video_list = data; 
    }) 
    .error(function (data) { 
     $scope.video_list = data; 
}); 

Нет ответа ошибки от той, получить объект, когда утешает его; но не может запрашивать в нем.

$scope.video_list_fun = function() { 
    $http.get('http://gdata.youtube.com/feeds/api/videos/-/chocolate?alt=json&orderby=published').then(function (response) { 
      $scope.video_list = response.data; 
    }); 
}; 

То же самое здесь, попытались с , прикован else также.

$scope.video_list = (httpGet('http://gdata.youtube.com/feeds/api/videos/-/chocolate?alt=json&orderby=published' 
        )); // HttpGet from http://stackoverflow.com/a/4033310/587021 

Это работает, но когда я разобрать его, например .: с JSON.parse; AngularJS избавляется от всех ключей с $.


Должен отметить, что я пытался с their other API, но не было в состоянии получить тот же результат (и не может включать в свою полезную арг на дату публикации и качество, потому что она не работает).

+1

Отметить [этот вопрос github] (https://github.com/angular/angular.js/issues/1463), похоже, не было хорошего решения ... –

ответ

2

Это похоже на ограничение перекрестного домена. Посмотрите, будет ли работать с вами $http.jsonp.

Обратите внимание на то, что в документации YouTube вы найдете alt=json-in-script, а также параметр callback.

Так вместо того, чтобы обращающиеся:

$http.get('http://gdata.youtube.com/feeds/api/videos/-/chocolate?alt=json&orderby=published') 

Вы получите доступ:

$http.jsonp('http://gdata.youtube.com/feeds/api/videos/-/chocolate?alt=json-in-script&orderby=published&callback=JSON_CALLBACK') 

Примечание различия:

  1. Используйте jsonp вместо get
  2. Использование alt=json-in-script вместо alt=json (обратите внимание, что это может быть отличаться в зависимости от API Docs)
  3. Добавить callback=JSON_CALLBACK (обратите внимание, что это может быть отличаться в зависимости от API Docs, но AngularJS ищет JSON_CALLBACK в ответ.

Check out this fiddle посмотреть рабочую версию (сравнить с this fiddle на основе исходного кода).

Также ознакомьтесь с this wiki изделием для получения дополнительной информации о JSONP.

+0

Хм, я пытался с 'jsonp' перед использованием синтаксиса обещания' success'; не пытался с этим или синтаксисом 'JSON_CALLBACK', поэтому спасибо: D –

+0

Я пробовал оба синтаксиса (с одним и тем же кодом; char для char), но ни один из них не работает для меня. Я пробовал из localhost и моего приложения heroku. –

+0

Что вы пытаетесь сделать с данными?Я изменил первую скрипку [здесь] (http://jsfiddle.net/3JWxQ/1/), чтобы показать некоторые видеоролики, работает ли она на вас? – Gloopy

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