utilizând o funcție numită ca callback pentru $ .getJSON în jQuery pentru a satisface Facebook Cerere de cereri de semnare

voturi
3

Am încercat să acceseze Facebook metoda Admin.getMetrics API prin intermediul jQuery. Sunt compunând corect adresa URL de solicitare pe partea de server (în scopul de a păstra aplicația mea secretă secretă). Sunt apoi trimiterea URL - ul pe la browser - ul pentru a fi cerere folosind jQuery.getJSON().

Facebook cere ca să trimit o copie a tuturor params cerere mele trunchiate cu cererea mea secretă , împreună cu solicitarea, pentru a verifica autenticitatea mea. Problema este că jQuery vrea să genereze numele funcției de apel invers în sine, pentru a se potrivi cu numele pe care o dă funcția de anonim va trece în a fi apelat atunci când se întoarce de date. Prin urmare, numele funcției nu este disponibilă până la jQuery.getJSON()Executa și Facebook consideră că cererea mea de a fi neautentic din cauza unei semnături nepotrivite (semnătura I trimit de-a lungul nu include param corect de apel invers pentru că nu a fost generat până jQuery.getJSON()RAN).

Singurul mod în care mă pot gândi din această problemă este de a specifica cumva numele funcției mele la jQuery.getJSON()loc de a permite să rămână anonim. Dar eu nu pot găsi nici o opțiune pentru a face acest lucru în jQuery AP.

Întrebat 15/10/2008 la 00:21
sursa de către utilizator
În alte limbi...                            


4 răspunsuri

voturi
1

Puteți trece opțiunea de JSONP la $ .ajaxSetup care vă va permite să se stabilească numele funcției pe care este chemat, docs după cum urmează:

JSONP String
Override numele funcției de apel invers într - o solicitare JSONP. Această valoare va fi utilizată în loc de „apel invers“ în „apel invers =?“ parte din șirul de interogare în adresa URL pentru un GET sau datele unei POST. Deci {JSONP: 'onJsonPLoad'} ar duce la 'onJsonPLoad =?' a trecut la server.

Vezi aici http://docs.jquery.com/Ajax/jQuery.ajax#options pentru mai multe detalii

Publicat 15/10/2008 la 00:47
sursa de către utilizator

voturi
0

Aceasta este o soluție mai bună cu un apel invers fix:

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

Problema cu acest apel invers este că se poate ocupa doar un singur tip de cerere, la un moment dat ca funcția este înregistrată la nivel global. Funcția de apel invers ar trebui, probabil, să se transforme într-un dispecer pentru diferitele tipuri de date pe care le-ar putea recupera și apela funcția corespunzătoare.

Publicat 15/10/2008 la 16:26
sursa de către utilizator

voturi
2

Utilizarea jQuery.getScriptsa dovedit a fi aproape - dar nu destul - răspunsul. Utilizarea getScript elimină necesitatea jQuery pentru a adăuga funcția de anonim numit dinamic la cerere params (deși va face în continuare că , dacă te duci mai departe și să - l dați o funcție anonim ca în codul de mai sus). Cu toate acestea, implicit în jQuery.getScript, ca și în toate celelalte apeluri din biblioteca Ajax jQuery, este de a adăuga un argument suplimentar în continuare _=12344567( în cazul în care 1234567 este într - adevăr o ștampilă de timp). jQuery face acest lucru pentru a preveni browser - ul de la cache răspunsul. Cu toate acestea, acest pauze suplimentare semnarea mea cererii ca doar funcția de apel invers-numit auto.

Cu ajutor pe #jquery, am aflat că singura modalitate de a obține jQuery nu să te pui la toate cu params dumneavoastră este de a face cererea de bază , folosind jQuery.Ajaxmetoda cu următoarele argumente:

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

( în cazul în care fbookUrleste API Facebook URL - ul am încercat să solicite cu params sale complete , inclusiv semnătura și callback=myFunction). dataType: "script"Arg specifică faptul că JSONP rezultată ar trebui să fie umplute într - o etichetă de script pe pagina de execuție, cache: truespune jQuery pentru a permite browser - ul pentru a cache răspunsul, adică pentru a sări peste adăugarea parametrului de timbru de timp.

Publicat 15/10/2008 la 17:12
sursa de către utilizator

voturi
3

Singurul lucru care a făcut lucrarea pentru mine au fost următoarele setări

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

Publicat 18/05/2011 la 13:30
sursa de către utilizator

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