2017-01-18 5 views
-1

Мне нужно загрузить файл JSON с другого сервера (где у меня нет контроля). Через несколько часов исследования обнаружили, что JSONP - это грязный хак, который отвечает моим мольбам.Потребление jsonp с angularjs, (не может CORS)

Я использую nodejs, обслуживая сайт на localhost: 3000, используя gulp. Загрузка JSON с локального хоста: 8000

Мне удалось получить пример работы с URL-адреса, который мне не нужен (случайно найден в Интернете), используя тот же код, что и у меня с моим URL-адресом.

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

Underneath, код, который я говорил:

(function() { 
'use strict'; 

angular 
    .module('qwe.asd') 
    .controller('UsersController', UsersController); 

/** @ngInject */ 
function UsersController($http, $log, $sce) { 

    var vm = this; 
    var trustedUsersAPI = "http://localhost:8000/users?callback=JSON_CALLBACK"; 
    $sce.trustAsResourceUrl(trustedUsersAPI); 

    $http.jsonp(trustedUsersAPI, { 
      'callback': 'JSON_CALLBACK' 
     }) 
     .success(function (data) { 
      $log.log("request 1 - OK"); 
      $log.log(data); 
      vm.users = data; 
     }) 
     .error(function() { 
      $log.log("request 1 - KO"); 
     }); 

    var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=JSON_CALLBACK"; 
    $sce.trustAsResourceUrl(url); 

    $http.jsonp(url) 
     .success(function (data) { 
      $log.log("request 2 - OK"); 
      $log.log(data); 
     }) 
     .error(function() { 
      $log.log("request 2 - KO"); 
     }); 


} 
})(); 

И журналы, созданные ...

angular.js:13424 request 1 - KO 
angular.js:13424 request 2 - OK 
angular.js:13424 Object {found: 12, posts: Array[12]} 

И, наконец, JSON файлы я (MIS) чтение:

Тот, который мне нужен, но у меня не может быть

[{"id":0,"firstname":"front","lastname":"end","email":"[email protected]"},{"id":1,"firstname":"back","lastname":"end","email":"[email protected]"},{"id":2,"firstname":"john","lastname":"doe","email":"[email protected]"},{"id":3,"firstname":"dev","lastname":"eloper","email":"[email protected]"},{"id":4,"firstname":"ad","lastname":"min","email":"[email protected]"}] 

И один мне не нужен, но работает отлично

{"found":12,"posts":[{"ID":XX,"site_ID":XXXX,"author":XXXX(..POSTS DATA WITH NO VALUE HERE..)}]} 

P.S. Я действительно зеленый здесь, я нахожусь угловатым с сегодняшнего утра!

+0

так ... что работает и не работает? –

+1

* «После нескольких часов исследования выяснилось, что JSONP - это грязный хак, который отвечает моим мошенникам». * Только если этот сервер поддерживает JSONP. ** Отправлено сервером для JSON против JSONP ** ** **. Пример JSON: '{" foo ":" bar "}' Пример JSONP: 'callback ({" foo ":" bar "})' –

+0

JSON, содержащийся в trustedUsersAPI, доступен через вкладку сети (в devtools от Chrome), но как-то недоступен через код. @KevinB –

ответ

-1

Для тех, кто идет за мной, я следил за неправильной дорожкой. Благодаря комментаторам я узнал, что JSONP должен поддерживаться на сервере (как это делает CORS).