Używam $http.jsonp()
żądania angulara, które pomyślnie zwraca json opakowane w funkcję:
var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=jsonp_callback";
$http.jsonp(url).
success(function(data, status, headers, config) {
//what do I do here?
}).
error(function(data, status, headers, config) {
$scope.error = true;
});
Jak uzyskać dostęp / przeanalizować zwróconą funkcję-zawiniętą-JSON?
javascript
angularjs
jsonp
akronymn
źródło
źródło
jsonp_callback
? Jeśli nie, to jest twój problem.function jsonp_callback(data) { return data.found; //should be 3 }
Odpowiedzi:
AKTUALIZACJA: od Angular 1.6
Musisz teraz zdefiniować callback w następujący sposób:
$http.jsonp('some/trusted/url', {jsonpCallbackParam: 'callback'})
Zmień / uzyskaj / zadeklaruj parametr przez
$http.defaults.jsonpCallbackParam
, domyślniecallback
Uwaga: musisz również upewnić się, że Twój adres URL został dodany do zaufanej / białej listy:
$sceDelegateProvider.resourceUrlWhitelist
lub jawnie zaufane przez:
$sce.trustAsResourceUrl(url)
success/error
zostały wycofane .POSŁUGIWAĆ SIĘ:
Poprzednia odpowiedź: Angular 1.5.x i wcześniejsze
Wszystko, co powinieneś zrobić, to zmienić
callback=jsonp_callback
sięcallback=JSON_CALLBACK
tak:A potem twoja
.success
funkcja powinna uruchomić się tak, jak ją masz, jeśli powrót się powiódł.Robiąc to w ten sposób, nie musisz brudzić globalnej przestrzeni. Jest to udokumentowane w dokumentacji AngularJS tutaj .
Zaktualizowano skrzypce Matta Ball'a, aby używały tej metody: http://jsfiddle.net/subhaze/a4Rc2/114/
Pełny przykład:
źródło
Najważniejsze nie rozumiałem już od jakiegoś czasu jest to, że wniosek musi zawierać „callback = JSON_CALLBACK”, ponieważ angularjs modyfikuje URL żądania , zastępując unikalny identyfikator dla „JSON_CALLBACK”. Odpowiedź serwera musi zawierać wartość parametru „callback” zamiast „JSON_CALLBACK” na sztywno:
Ponieważ pisałem własny skrypt serwera PHP, pomyślałem, że wiem, jakiej nazwy funkcji potrzebuje i nie muszę podawać w żądaniu „callback = JSON_CALLBACK”. Wielkim błędem!
AngularJS zastępuje „JSON_CALLBACK” w żądaniu unikalną nazwą funkcji (np. „Callback = angular.callbacks._0”), a odpowiedź serwera musi zwrócić tę wartość:
źródło
json
plikiem statycznym?To było bardzo pomocne. Angular nie działa dokładnie tak jak JQuery. Ma własną metodę jsonp (), która rzeczywiście wymaga „& callback = JSON_CALLBACK” na końcu ciągu zapytania. Oto przykład:
Następnie wyświetl lub manipuluj {{data}} w szablonie Angular.
źródło
To powinno działać dobrze, o ile funkcja
jsonp_callback
jest widoczna w zakresie globalnym:Pełne demo: http://jsfiddle.net/mattball/a4Rc2/ (zastrzeżenie: nigdy wcześniej nie pisałem żadnego kodu AngularJS)
źródło
Nadal musisz ustawić
callback
parametry:Gdzie „nazwaFunkcji” to ujednolicone odniesienie do funkcji zdefiniowanej globalnie. Możesz zdefiniować go poza swoim skryptem kątowym, a następnie przedefiniować w swoim module.
źródło
Do analizowania zrób to-
Lub możesz użyć `$ scope.data = JSON.Stringify (data);
W szablonie Angular możesz go używać jako
źródło
u mnie powyższe rozwiązania działały tylko wtedy, gdy dodałem "format = jsonp" do parametrów żądania.
źródło
Używam kątowego 1.6.4 i odpowiedź dostarczona przez subhaze nie działa dla mnie. Trochę go zmodyfikowałem i wtedy zadziałało - musisz użyć wartości zwracanej przez $ sce.trustAsResourceUrl . Pełny kod:
źródło