Muszę załadować plik JSON z innego serwera (na którym nie mam kontroli). Po kilku godzinach badania wykazały, że JSONP to brudny hack, który odpowiada na moje prośby.
Korzystam z nodejs, obsługując stronę na localhost: 3000 używając gulp. Ładowanie JSON z localhost: 8000
Udało mi się uruchomić przykład z adresu URL, którego nie potrzebuję (znalazłem go losowo w Internecie), używając tego samego kodu, który nie działał z moim adresem URL.
To sprawia, że zastanawiam się, czy próbuję odczytać plik jak coś, co nie jest? O ile mogłem zbadać, nie powinno być potrzebne, aby parsować JSON w JSONP. Czy jestem na dobrej drodze?
Poniżej kod, o którym mówiłem:
(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");
});
}
})();
I dzienniki wygenerowane ...
angular.js:13424 request 1 - KO
angular.js:13424 request 2 - OK
angular.js:13424 Object {found: 12, posts: Array[12]}
I na koniec, pliki JSON, które czytam (źle):
Ten, którego potrzebuję, ale nie mogę
[{"id":0,"firstname":"front","lastname":"end","email":"frontend@example.com"},{"id":1,"firstname":"back","lastname":"end","email":"backend@example.com"},{"id":2,"firstname":"john","lastname":"doe","email":"johndoe@example.com"},{"id":3,"firstname":"dev","lastname":"eloper","email":"developer@example.com"},{"id":4,"firstname":"ad","lastname":"min","email":"admin@example.com"}]
I ten, którego nie potrzebuję, ale działa dobrze
{"found":12,"posts":[{"ID":XX,"site_ID":XXXX,"author":XXXX(..POSTS DATA WITH NO VALUE HERE..)}]}
P.S. Jestem tu naprawdę zielony, od dziś rano jestem kanciasty!
Odpowiedzi:
-1 dla odpowiedzi nr 1Dla tych, którzy mnie ścigają, podążałem złym tropem. Dzięki komentatorom dowiedziałem się, że JSONP musi być obsługiwany na serwerze (podobnie jak CORS).