ved hjelp av en navngitt funksjon som tilbakeringing for $ .getJSON i jQuery for å tilfredsstille Facebook forespørsel signering krav

stemmer
3

Jeg prøver å få tilgang til Facebook API Admin.getMetrics metode via jQuery. Jeg riktig komponere forespørsel url på tjenersiden (for å holde min app hemmelig hemmelig). Jeg så sender url over til nettleseren til å være forespørsel hjelp jQuery.getJSON().

Facebook krever at jeg sender en kopi av alle mine forespørsel params hashed med søknaden min hemmelighet sammen med anmodning for å bekrefte min autentisitet. Problemet er at jQuery ønsker å generere navnet på tilbakeringingsfunksjonen i seg selv for å matche navnet det gir til den anonyme funksjonen du passere i å bli kalt når dataene avkastning. Derfor er navnet på funksjonen ikke tilgjengelig før jQuery.getJSON()Utfører og Facebook vurderer min forespørsel om å være inautentisk på grunn av en feilaktige signatur (signaturen jeg sende langs inkluderer ikke riktig tilbakeringing param fordi det ikke ble generert før jQuery.getJSON()løp).

Den eneste måten jeg kan tenke på ut av dette problemet er å liksom angi navnet på min funksjon til jQuery.getJSON()stedet for å la den forbli anonym. Men jeg kan ikke finne noen alternativ for å gjøre det i jQuery AP.

Publisert på 14/10/2008 klokken 23:21
kilden bruker
På andre språk...                            


4 svar

stemmer
1

Du kan passere JSONP alternativ til $ .ajaxSetup som vil tillate deg å fikse funksjonsnavnet som blir kalt, docs lyde som følger:

JSONP String
Overstyrer tilbakeringingsfunksjonen navn i en JSONP forespørsel. Denne verdien vil bli brukt i stedet for 'tilbakeringing' i 'tilbakeringing =?' en del av søkestrengen i nettadressen for en GET eller dataene for et innlegg. Så {JSONP: 'onJsonPLoad'} vil resultere i 'onJsonPLoad =?' sendes til serveren.

Se her http://docs.jquery.com/Ajax/jQuery.ajax#options for mer informasjon

Svarte 14/10/2008 kl. 23:47
kilden bruker

stemmer
0

Dette er en bedre løsning med en fast tilbakeringing:

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'); } );
});

Problemet med dette tilbakeringing er at du kan bare håndtere en slags forespørsel om gangen som funksjonen er globalt registrert. Tilbakeringingsfunksjonen vil trolig måtte slå inn en dispatcher for de ulike typer data at det kunne hente og ringe den aktuelle funksjonen.

Svarte 15/10/2008 kl. 15:26
kilden bruker

stemmer
2

Bruken av jQuery.getScriptviste seg å være nær - men ikke helt - svaret. Bruke getScript eliminerer jQuery behov for å legge til dynamisk heter anonym funksjon til forespørselen params (men det vil fortsatt gjøre det hvis du går videre og gi det en anonym funksjon som i koden ovenfor). Men standard i jQuery.getScript, som i alle andre samtaler i jQuery Ajax-bibliotek, er å legge en ytterligere ekstra argument _=12344567(der 1234567 er virkelig et tidsstempel). jQuery gjør dette for å hindre leseren fra caching responsen. Men denne ekstra pauser min signering av forespørselen akkurat som auto heter tilbakering funksjon.

Med litt hjelp på #jquery, lærte jeg at den eneste måten å få jQuery ikke å rote i det hele tatt med params er å gjøre forespørselen ved hjelp av basen jQuery.Ajaxmetoden med følgende argumenter:

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

(der fbookUrler Facebook API url Jeg prøver å be med sine fulle params inkludert signaturen og callback=myFunction). Den dataType: "script"arg presiserer at den resulterende JSONP bør stappet inn i et skriptmerket på siden for henrettelsen, cache: trueforteller jQuery å tillate nettleseren å cache responsen, det vil si å hoppe tillegg av tidsangivelse parameter.

Svarte 15/10/2008 kl. 16:12
kilden bruker

stemmer
3

Det eneste som gjorde jobben for meg var følgende innstillinger

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

Svarte 18/05/2011 kl. 12:30
kilden bruker

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