met behulp van een benoemde functie als de callback voor $ .getJSON in jQuery naar Facebook verzoek ondertekening eisen te voldoen

stemmen
3

Ik probeer om toegang te krijgen tot de Facebook API Admin.getMetrics methode via jQuery. Ik ben juist het samenstellen van het verzoek url op de server (met het oog op mijn app geheim geheim te houden). Ik ben dan het verzenden van de url naar de browser op het verzoek van zijn gebruik jQuery.getJSON().

Facebook vereist dat ik een kopie van al mijn verzoek params hash met mijn aanvraag geheim samen met het verzoek te verzenden om mijn echtheid te controleren. Het probleem is dat jQuery wil de naam van de callback functie zelf genereren om de naam die het geeft aan de anonieme functie passeert u in te passen als de gegevens terug te noemen. Daarom is de naam van de functie is niet beschikbaar tot jQuery.getJSON()uitvoert en Facebook beschouwt mijn verzoek niet-authentiek te wijten aan een mismatched handtekening (de handtekening ik meesturen bevat niet de juiste callback param want dat was niet gegenereerd tot jQuery.getJSON()RAN).

De enige manier waarop ik kan bedenken van dit probleem is om de naam van mijn functie een of andere manier te geven om jQuery.getJSON()in plaats van waardoor het om anoniem te blijven. Maar ik kan geen optie om dit te doen in de jQuery AP niet vinden.

De vraag is gesteld op 15/10/2008 om 00:21
bron van user
In andere talen...                            


4 antwoorden

stemmen
1

U kunt de optie JSONP tot $ .ajaxSetup die u zal toestaan ​​om de functie naam die wordt genoemd, de documentatie als volgt vast te passeren:

jsonp String
Hef de callback functie naam in een jsonp aanvraag. Deze waarde wordt gebruikt in plaats van 'callback' in de 'callback =?' een deel van de query string in de URL voor een GET of de gegevens voor een POST. Dus {jsonp: 'onJsonPLoad'} zou resulteren in 'onJsonPLoad =?' doorgegeven aan de server.

Zie hier http://docs.jquery.com/Ajax/jQuery.ajax#options voor meer informatie

antwoordde op 15/10/2008 om 00:47
bron van user

stemmen
0

Dit is een betere oplossing met een vaste callback:

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

Het probleem met dit callback is dat je kunt maar één soort verzoek te behandelen in een tijd als de functie wereldwijd is geregistreerd. De callback functie zou waarschijnlijk moeten veranderen in een dispatcher voor de verschillende soorten gegevens die het zou kunnen halen en bel de betreffende functie.

antwoordde op 15/10/2008 om 16:26
bron van user

stemmen
2

Het gebruik van jQuery.getScriptbleek dicht te zijn - maar niet helemaal - het antwoord. Met behulp van getScript elimineert behoefte jQuery om de dynamisch genoemd anonieme functie toe te voegen aan het verzoek params (hoewel het nog steeds doen als je ga je gang en geef het een anonieme functie als in de bovenstaande code). Echter, de standaard in jQuery.getScript, net als in alle andere gesprekken in jQuery Ajax bibliotheek, is een verdere extra argument toevoegen _=12344567(waar 1234567 is echt een tijdstempel). jQuery doet dit om de browser te voorkomen dat caching de respons. Echter, deze extra pauzes mijn ondertekening van het verzoek net als de auto met de naam callback functie.

Met wat hulp op #jquery, leerde ik dat de enige manier om jQuery krijgen niet te knoeien helemaal met je params is om het verzoek te maken met behulp van de basis jQuery.Ajaxmethode met de volgende argumenten:

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

(waar fbookUrlis de Facebook-API url Ik probeer te vragen met zijn volledige params inbegrip van de ondertekening en de callback=myFunction). De dataType: "script"arg geeft aan dat de resulterende JSONP moet worden gevuld in een script-tag op de pagina voor de uitvoering, cache: truevertelt jQuery zodat de browser om de respons te cachen, dat wil zeggen de toevoeging van het stempel parameter tijd overslaan.

antwoordde op 15/10/2008 om 17:12
bron van user

stemmen
3

Het enige dat het werk deed voor mij waren de volgende instellingen

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

antwoordde op 18/05/2011 om 13:30
bron van user

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