Czy ktoś mógłby mi pomóc w ustaleniu, jak zacząć korzystać z JSONP?
Kod:
$('document').ready(function() {
var pm_url = 'http://twitter.com/status';
pm_url += '/user_timeline/stephenfry.json';
pm_url += '?count=10&callback=photos';
var photos = function (data) {
alert(data);
};
$.ajax({
url: pm_url,
dataType: 'jsonp',
jsonpCallback: 'photos',
jsonp: false,
});
});
Fiddle: http://jsfiddle.net/R7EPt/6/
Powinien wygenerować alert, o ile mogę wypracować na podstawie dokumentacji: nie jest (ale też nie powoduje żadnych błędów).
dzięki.
Odpowiedzi:
JSONP to naprawdę prosta sztuczka, aby pokonać XMLHttpRequest w tej samej polityce domenowej. (Jak wiadomo, nie można wysłać żądania AJAX (XMLHttpRequest) do innej domeny).
Tak więc - zamiast używać XMLHttpRequest, musimy użyć skryptowych znaczników HTMLl, tych, których zwykle używasz do ładowania plików JS, aby JS mógł uzyskać dane z innej domeny. Brzmi dziwnie?
Chodzi o to - okazuje się, że tagi skryptu mogą być używane w sposób podobny do XMLHttpRequest ! Sprawdź to:
Otrzymasz segment skryptu, który wygląda tak po załadowaniu danych:
Jest to jednak nieco niewygodne, ponieważ musimy pobrać tę tablicę ze znacznika script . Dlatego twórcy JSONP zdecydowali, że będzie to działać lepiej (i tak jest):
Czy zauważyłeś tam funkcję my_callback ? Tak więc - gdy serwer JSONP otrzyma twoje żądanie i znajdzie parametr wywołania zwrotnego - zamiast zwracać zwykłą tablicę JS zwróci to:
Zobacz, gdzie jest zysk: teraz otrzymujemy automatyczne oddzwanianie ( my_callback ), które zostanie uruchomione, gdy otrzymamy dane. To wszystko, co należy wiedzieć o JSONP : jest to callback i tagi skryptowe.
UWAGA:
Są to proste przykłady użycia JSONP, nie są to skrypty gotowe do produkcji.
Demonstracja RAW JavaScript (prosty kanał Twittera przy użyciu JSONP):
Podstawowy przykład jQuery (prosty kanał Twittera przy użyciu JSONP):
JSONP oznacza JSON z Padding . (bardzo źle nazwana technika, ponieważ tak naprawdę nie ma nic wspólnego z tym, co większość ludzi uważałaby za „padding”).
źródło
Access-Control-Allow-Origin
nagłówki, które umożliwiają wykonywanie regularnych wywołań Ajax w niektórych domenach pochodzących z różnych źródeł.Jest jeszcze łatwiejszy sposób pracy z JSONP za pomocą jQuery
?
Na końcu adresu URL jQuery mówi, że jest to JSONP prośba zamiast JSON. jQuery automatycznie rejestruje i wywołuje funkcję zwrotną.Aby uzyskać więcej informacji, zapoznaj się z dokumentacją jQuery.getJSON .
źródło
&callback=?
ponieważ nie jest to pierwszy parametr w twoim przypadku.W odpowiedzi na OP występują dwa problemy z twoim kodem: musisz ustawić jsonp = 'callback', a dodanie funkcji callback w zmiennej takiej jak ty nie wydaje się działać.
Aktualizacja: kiedy to napisałem, interfejs API Twittera był po prostu otwarty, ale zmienili go i teraz wymaga uwierzytelnienia. Zmieniłem drugi przykład na działający (2014Q1), ale teraz korzystam z github.
To już nie działa - w ramach ćwiczenia sprawdź, czy możesz go zastąpić interfejsem API Github:
chociaż alert () takiej tablicy nie działa tak naprawdę ... Zakładka „Net” we Firebug odpowiednio wyświetli JSON. Kolejna przydatna sztuczka
Możesz także użyć metody jQuery.getJSON . Oto kompletny przykład HTML, który pobiera listę „gists” z github. W ten sposób tworzy dla ciebie losowo nazwaną funkcję oddzwaniania, jest to końcowa „callback =?” w adresie URL.
źródło
Powyższy kod pomaga w uzyskiwaniu obrazów z interfejsu API Flicker. Wykorzystuje metodę GET do pobierania obrazów przy użyciu JSONP. Można go szczegółowo znaleźć tutaj
źródło