stosując nazwie funkcję wywołania zwrotnego dla $ .getJSON w jQuery, aby zaspokoić wymagania podpisywania żądania Facebooka

głosy
3

Próbuję uzyskać dostęp do API Facebook Admin.getMetrics metodę poprzez jQuery. Ja właściwie komponować url żądania po stronie serwera (w celu utrzymania mojej aplikacji tajny sekret). Mam następnie wysyłając na adres do przeglądarki, aby być wniosek użyciu jQuery.getJSON().

Facebook wymaga, aby wysłać kopię wszystkich moich żądań params przerywanych z mojej aplikacji tajemnicy wraz z żądaniem, aby zweryfikować autentyczność. Problemem jest to, że jQuery chce wygenerować nazwę samej funkcji wywołania zwrotnego w celu dostosowania nazwy to daje do anonimowej funkcji mijamy się, by nazwać gdy zwraca dane. Dlatego nazwa funkcji nie jest dostępna aż jQuery.getJSON()sporządzi i Facebook uzna moją prośbę, aby być nieautentyczne powodu niedopasowania podpis (podpis wysyłam razem nie obejmuje prawidłowego oddzwaniania param dlatego, że nie został wygenerowany aż jQuery.getJSON()RAN).

Jedynym sposobem mogę myśleć z tego problemu jest jakoś określić nazwę mojej funkcji, aby jQuery.getJSON()zamiast pozwalając zachować anonimowość. Ale nie mogę znaleźć żadnej opcji dla takiego postępowania w jQuery AP.

Utwórz 15/10/2008 o 00:21
źródło użytkownik
W innych językach...                            


4 odpowiedzi

głosy
1

Można przekazać opcję jsonp do $ .ajaxSetup która pozwoli Ci ustalić nazwę funkcji, która jest wywoływana, docs brzmią następująco:

jsonp String
Zastąp nazwę funkcji oddzwaniania w żądaniu jsonp. Wartość ta będzie używana zamiast „zwrotnego” w 'zwrotnego =? część łańcucha zapytania w adresie URL GET lub danych na stanowisko. Więc {jsonp: 'onJsonPLoad'} skutkowałoby 'onJsonPLoad =? przekazywane do serwera.

Zobacz tutaj http://docs.jquery.com/Ajax/jQuery.ajax#options więcej szczegółów

Odpowiedział 15/10/2008 o 00:47
źródło użytkownik

głosy
0

Jest to lepsze rozwiązanie ze stałą zwrotnego:

window.fixed_callback = function(data){
    alert(data.title);
};

$(function() {
    $.getScript("http://api.flickr.com/services/feeds/photos_public.gne?tags=cats&tagmode=any&format=json&jsoncallback=fixed_callback", function(data) {
    alert('done'); } );
});

Problem z tym zwrotnego to można obsługiwać jeden rodzaj żądanie tylko w momencie, gdy funkcja jest globalnie zarejestrowany. Funkcja zwrotna prawdopodobnie trzeba przekształcić dyspozytora dla różnych rodzajów danych, które mogłyby je odzyskać i wywołać odpowiednią funkcję.

Odpowiedział 15/10/2008 o 16:26
źródło użytkownik

głosy
2

Zastosowanie jQuery.getScriptokazał się być blisko - ale nie całkiem - odpowiedź. Korzystanie getScript eliminuje potrzebę jQuery, aby dodać dynamicznie nazwie funkcji anonimowej do parametrów żądania (choć będzie to jeszcze zrobić, jeśli iść do przodu i przekazać ją anonimową funkcję jak w powyższym kodzie). Jednak domyślne jQuery.getScript, jak we wszystkich innych połączeń w Ajax biblioteki jQuery, znajduje dołączyć kolejny dodatkowy argument _=12344567(gdzie 1234567 jest naprawdę datownik). jQuery to robi, aby zapobiec przeglądarki z buforowanie odpowiedzi. Jednak ta dodatkowa łamie mi podpisanie wniosku podobnie jak funkcja automatycznego nazwie oddzwonienia.

Z pomocą na #jquery, dowiedziałem się, że jedynym sposobem, aby uzyskać jQuery nie bałagan w ogóle ze swoimi params jest, aby wniosek stosując podstawową jQuery.Ajaxmetodę z następującymi argumentami:

jQuery.ajax({
  url: fbookUrl,
  dataType: "script",
  type: "GET",
  cache: true,
  callback: null,
  data: null
});

(gdzie fbookUrljest Facebook API URL Próbuję zwrócić z jego pełnymi params w tym podpisanie i callback=myFunction). dataType: "script"Arg określa, że otrzymany JSONP powinny być nadziewane w tagu skrypt na stronie do realizacji, cache: truemówi jQuery aby umożliwić przeglądarka buforować odpowiedzi, to znaczy, aby pominąć dodawanie parametru stemplem czasowym.

Odpowiedział 15/10/2008 o 17:12
źródło użytkownik

głosy
3

Jedyną rzeczą, którą zrobiłem pracę dla mnie były następujące ustawienia

jQuery.ajax({ url: fbookUrl, dataType: "jsonp", type: "GET", cache: true, jsonp: false, jsonpCallback: "MyFunctionName" //insert here your function name });

Odpowiedział 18/05/2011 o 13:30
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more