Puis-je utiliser un nom de fonction de rappel statique (c'est-à-dire prédéterminé) lorsque je demande JSONP avec jQuery?

StackOverflow https://stackoverflow.com/questions/1608302

Question

La documentation jQuery répertorie l'exemple suivant d'utilisation de $ .getJSON pour demander JSONP. :

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
  function(data) {
    $.each(data.items, function(i,item) {
      $("<img/>").attr("src", item.media.m).appendTo("#images");
      if (i == 3) return false;
    });
  });

Plutôt que d'utiliser cette méthode, qui génère un nom de fonction de rappel dynamique à cause de ce paramètre:

jsoncallback=?

Je veux pouvoir définir à l'avance un nom de fonction codé en dur, comme ceci:

jsoncallback=test

Cela fonctionne, dans le sens où j'exécute le script et que l'objet JSON que je récupère est encapsulé dans un appel à test ().

Cependant, je ne vois pas comment configurer la fonction de rappel. Ne devrait-il pas être aussi simple que cela?

function test(data) {
  console.log(data);
}

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=test");

Lorsque j'essaie cela, je récupère le JSONP qui est encapsulé dans test (), mais la fonction test () que j'ai définie n'est jamais appelée. Est-ce que je manque quelque chose?

Merci pour toute aide!

Était-ce utile?

La solution

Comme défini dans la documentation pour que vous puissiez utiliser la méthode suivante

jQuery.getJSON(...)

vous devez spécifier callback =? lors d'un appel JSONP. Je l'utilise généralement uniquement pour les types de réponse de "json". Pour les types de réponse de "jsonp", vous souhaitez utiliser:

jQuery.get(...)

et spécifiez le type comme "jsonp". Consultez cette documentation sur le sujet . Mais cela est également lié au fait de devoir avoir un callback =? .

Ce que je pense que vous êtes vous cherchez ceci :

jQuery.getScript(...)

Qui doit exécuter la méthode que vous avez définie dans votre callback .

Autres conseils

Ah, le "connexe" la section de la barre latérale m'a sauvé ici. Après avoir soumis cette question, j'ai trouvé une question similaire déjà posée:

utiliser une fonction nommée en tant que rappel de $ .getJSON dans jQuery pour répondre aux demandes de signature des demandes de Facebook

La réponse de Duncan du 15 octobre a résolu cela pour moi:

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

Je suppose que la clé utilise $ .getScript au lieu de $ .getJSON. On peut toujours spécifier une fonction de rappel anonyme dans les paramètres de la méthode $ .getScript, qui sera exécutée après la fonction de rappel nommée dans les paramètres de l'URL de la requête ("fixed_callback" dans ce cas). J'espère que cela aidera quelqu'un sur la route.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top