¿Puedo usar un nombre de función de devolución de llamada estática (es decir, predeterminada) cuando solicito JSONP con jQuery?

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

Pregunta

La documentación de jQuery enumera el siguiente ejemplo de uso de $ .getJSON para solicitar 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;
    });
  });

En lugar de usar este método, que genera un nombre de función de devolución de llamada dinámica debido a este parámetro:

jsoncallback=?

Quiero poder configurar eso por adelantado a un nombre de función codificado, como este:

jsoncallback=test

Esto funciona, en el sentido de que ejecuto el script y el JSONP que recupero tiene el objeto JSON envuelto en una llamada a prueba ().

Sin embargo, no puedo averiguar cómo configurar la función de devolución de llamada. ¿No debería ser tan simple como esto?

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

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

Cuando lo intento, recupero el JSONP que está envuelto en test (), pero la función test () que he definido nunca se llama. ¿Me estoy perdiendo algo?

¡Gracias por cualquier ayuda!

¿Fue útil?

Solución

Como definido en la documentación para que uses el siguiente método

jQuery.getJSON(...)

debe especificar callback =? al realizar una llamada JSONP. Normalmente solo uso esto para los tipos de respuesta de " json " ;. Para los tipos de respuesta de " jsonp " ;, desea utilizar:

jQuery.get(...)

y especifique el tipo como " jsonp " ;. Consulte esta documentación sobre el tema . Pero eso también está relacionado con el hecho de tener que tener un callback =? .

Lo que creo que estás buscando es esto :

jQuery.getScript(...)

Que debería ejecutar el método que hayas definido en tu callback .

Otros consejos

Ah, el " Relacionado " La sección de la barra lateral me salvó aquí. Después de enviar esta pregunta, encontré una pregunta similar que ya he preguntado:

utilizando una función con nombre como devolución de llamada para $ .getJSON en jQuery para satisfacer las demandas de firma de Facebook

La respuesta de Duncan del 15 de octubre resolvió esto por mí:

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

Supongo que la clave es usar $ .getScript en lugar de $ .getJSON. Todavía se puede especificar una función de devolución de llamada anónima en los parámetros del método $ .getScript, que se ejecutará después de la función de devolución de llamada nombrada en los parámetros de URL de la solicitud (" fixed_callback " en este caso). Espero que esto ayude a alguien en el camino.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top