pomocí pojmenovaného funkci zpětného volání na $ .getJSON v jQuery, aby splňovaly požadavek Facebook požadavky podepisování

hlasů
3

Snažím se získat přístup k Facebook Admin.getMetrics API metodu pomocí jQuery. Jsem správně skládat URL požadavku na straně serveru (s cílem udržet mé aplikaci tajemství v tajnosti). Já pak vysílá url nad do prohlížeče, aby žádost pomocí jQuery.getJSON().

Facebook vyžaduje, aby mi poslat kopii všechny mé žádosti params hash se svým aplikačním tajemství spolu s požadavkem, aby se ověřila svou autenticitu. Problém je, že jQuery chce generovat název callback funkce sama tak, aby odpovídaly názvu přikládá anonymní funkce předáte do které mají být volána, když data jsou obnovena. Proto je název funkce není k dispozici, dokud jQuery.getJSON()provádí a Facebook považuje za svůj požadavek, aby byl inauthentic kvůli neodpovídající podpisu (podpisu I poslat spolu neobsahuje správné zpětné volání param, protože to nebyl vygenerován do jQuery.getJSON()RAN).

Jediný způsob, jak mohu myslet z tohoto problému je nějak zadat název mé funkci jQuery.getJSON()namísto což mu umožňuje zůstat v anonymitě. Ale nemohu najít žádnou možnost přitom v jQuery AP.

Položena 15/10/2008 v 00:21
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
1

Můžete předat možnost jsonp dolarů .ajaxSetup, který vám umožní opravit název funkce, který se nazývá, Dokumenty zní následovně:

jsonp String
Potlačí zpětné volání název funkce v požadavku jsonp. Tato hodnota bude použita namísto ‚zpětného volání‘ v ‚callback =?‘ část řetězce dotazu v URL pro GET nebo dat pro POST. Takže {jsonp: 'onJsonPLoad'} by mělo za následek 'onJsonPLoad =?' předána na server.

Viz zde http://docs.jquery.com/Ajax/jQuery.ajax#options pro více informací

Odpovězeno 15/10/2008 v 00:47
zdroj uživatelem

hlasů
0

Toto je lepší řešení s pevnou zpětného volání:

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

Problém s tímto zpětné volání je, že můžete zvládnout pouze jeden druh žádosti v době, kdy je funkce globálně registrován. Funkce zpětného volání bude pravděpodobně muset obrátit na dispečera pro různé druhy údajů, které by mohly získat a volat příslušnou funkci.

Odpovězeno 15/10/2008 v 16:26
zdroj uživatelem

hlasů
2

Použití jQuery.getScriptse ukázalo být blízko - ale ne úplně - odpověď. Používání getScript eliminuje potřebu jQuery, aby přidat dynamicky pojmenovanou anonymní funkce k požadavku params (i když to bude ještě dělat, že pokud vám do toho jít a předat mu anonymní funkci jako ve výše uvedeném kódu). Nicméně, výchozí v jQuery.getScript, stejně jako ve všech ostatních výzev v knihovně Ajax jQuery je, je připojit další další argument _=12344567(kde 1234567 je ve skutečnosti časové razítko). jQuery dělá to, aby se zabránilo prohlížeče do mezipaměti odpověď. Nicméně, toto dodatečné přestávky můj podpis žádosti stejně jako funkci zpětného volání s názvem auto.

S trochou pomoci na #jquery jsem se dozvěděl, že jediný způsob, jak dostat jQuery, aby nepořádek vůbec se svými params je, aby požadavek pomocí základní jQuery.Ajaxmetody s následujícími argumenty:

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

(kde fbookUrlje Facebook API url Snažím se požádat o jeho plném params včetně podpisu a callback=myFunction). dataType: "script"Arg určuje, že výsledná jsonp by měl být nacpaný do skriptu značku na stránce pro provádění, cache: trueříká jQuery, aby prohlížeč do mezipaměti odezvu, tj přeskočit přidání parametru časového razítka.

Odpovězeno 15/10/2008 v 17:12
zdroj uživatelem

hlasů
3

Jediná věc, která odvedla práci, pro mě byly následující nastavení

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

Odpovězeno 18/05/2011 v 13:30
zdroj uživatelem

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