en utilisant une fonction nommée comme le rappel pour $ .getJSON en jQuery pour satisfaire les demandes de signature de demande Facebook

voix
3

J'essaie d'accéder à l'API Facebook méthode Admin.getMetrics via jQuery. Je compose correctement l'URL de la demande du côté du serveur (afin de garder mon application secrète secret). Je puis envoie l'URL vers le navigateur pour demander l' aide jQuery.getJSON().

Facebook exige que je vous envoie une copie de tous mes params demande hachurées avec mon secret de l' application ainsi que la demande afin de vérifier mon authenticité. Le problème est que jQuery veut générer le nom de la fonction de rappel lui - même afin de faire correspondre le nom qu'il donne à la fonction anonyme que vous passez à appeler lorsque les rendements de données. Par conséquent, le nom de la fonction est pas disponible avant l' jQuery.getJSON()exécution et Facebook considère ma demande d'être inauthentique en raison d'une signature ne correspondent pas (la signature , je n'envoie le long comprend pas le rappel de param correcte , parce que n'a pas été générée jusqu'à jQuery.getJSON()RAN).

La seule façon que je peux penser de ce problème est de préciser en quelque sorte le nom de ma fonction au jQuery.getJSON()lieu de lui permettre de conserver l' anonymat. Mais je ne peux pas trouver une option pour le faire dans l'AP jQuery.

Créé 15/10/2008 à 00:21
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
1

Vous pouvez passer l'option JSONP à .ajaxSetup $ qui vous permettra de fixer le nom de la fonction qui est appelée, les documents se lisent comme suit:

jsonp chaîne
Remplacer le nom de la fonction de rappel dans une demande de jsonp. Cette valeur sera utilisée à la place de « rappel » dans le «rappel =? une partie de la chaîne de requête dans l'URL pour GET ou les données d'un POST. Alors {jsonp: 'onJsonPLoad'} entraînerait 'onJsonPLoad =? transmis au serveur.

Voir ici http://docs.jquery.com/Ajax/jQuery.ajax#options pour plus de détails

Créé 15/10/2008 à 00:47
source utilisateur

voix
0

Ceci est une meilleure solution avec un rappel fixe:

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

Le problème avec ce rappel est que vous ne pouvez gérer une sorte de demande à la fois que la fonction est globalement enregistrée. La fonction de rappel aurait probablement se transformer en un répartiteur pour les différents types de données qu'il pourrait récupérer et appeler la fonction appropriée.

Créé 15/10/2008 à 16:26
source utilisateur

voix
2

L'utilisation de jQuery.getScriptavéré être proche - mais pas tout à fait - la réponse. L' utilisation getScript élimine le besoin de jQuery pour ajouter la fonction anonyme dynamique nommée aux params de demande (bien qu'il fera encore que si vous allez - y et passez une fonction anonyme comme dans le code ci - dessus). Cependant, le défaut jQuery.getScript, comme dans tous les autres appels dans la bibliothèque Ajax jQuery, est d'ajouter un autre argument supplémentaire _=12344567(où 1.234.567 est vraiment un horodatage). jQuery fait cela pour empêcher le navigateur de mettre en cache la réponse. Cependant, ce pauses supplémentaires ma signature de la demande tout comme la fonction de rappel automatique nommé.

Avec un peu d' aide sur #jquery, j'ai appris que la seule façon d'obtenir jQuery pas gâcher du tout avec vos params est de faire la demande en utilisant la base jQuery.Ajaxméthode avec les arguments suivants:

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

(où fbookUrlest l'URL API Facebook Je suis en train de demander à son plein params , y compris la signature et le callback=myFunction). Le dataType: "script"arg précise que le résultat JSONP doit être fourré dans une balise de script sur la page pour l' exécution, cache: trueindique jQuery pour permettre au navigateur de mettre en cache la réponse, soit d'ignorer l'ajout du paramètre d'horodatage.

Créé 15/10/2008 à 17:12
source utilisateur

voix
3

La seule chose qui a fait le travail pour moi étaient les paramètres suivants

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

Créé 18/05/2011 à 13:30
source utilisateur

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