¿Podría alguien ayudarme a resolver cómo comenzar con JSONP?
Código:
$('document').ready(function() {
var pm_url = 'http://twitter.com/status';
pm_url += '/user_timeline/stephenfry.json';
pm_url += '?count=10&callback=photos';
var photos = function (data) {
alert(data);
};
$.ajax({
url: pm_url,
dataType: 'jsonp',
jsonpCallback: 'photos',
jsonp: false,
});
});
Violín: http://jsfiddle.net/R7EPt/6/
Debería generar una alerta, por lo que puedo deducir de la documentación: no es (pero tampoco produce ningún error).
Gracias.
Respuestas:
JSONP es realmente un simple truco para superar la misma política de dominio XMLHttpRequest . (Como sabe, uno no puede enviar la solicitud AJAX (XMLHttpRequest) a un dominio diferente).
Entonces, en lugar de usar XMLHttpRequest , tenemos que usar etiquetas HTMLl de script , las que usualmente usas para cargar archivos JS, para que JS obtenga datos de otro dominio. ¿Suena raro?
La cosa es que resulta que las etiquetas de script se pueden usar de manera similar a XMLHttpRequest . Mira esto:
Terminará con un segmento de script que se ve así después de cargar los datos:
Sin embargo, esto es un poco incómodo, porque tenemos que buscar esta matriz desde la etiqueta del script . Entonces, los creadores de JSONP decidieron que esto funcionará mejor (y lo es):
¿ Notan la función my_callback allí? Entonces, cuando el servidor JSONP recibe su solicitud y encuentra el parámetro de devolución de llamada, en lugar de devolver una matriz JS simple, devolverá esto:
Vea dónde está el beneficio: ahora obtenemos una devolución de llamada automática ( my_callback ) que se activará una vez que obtengamos los datos. Eso es todo lo que hay que saber sobre JSONP : es una devolución de llamada y etiquetas de script.
NOTA:
Estos son ejemplos simples del uso de JSONP, estos no son scripts listos para producción.
Demostración de JavaScript RAW (feed de Twitter simple usando JSONP):
Ejemplo básico de jQuery (feed de Twitter simple usando JSONP):
JSONP significa JSON con relleno . (técnica muy mal nombrada, ya que realmente no tiene nada que ver con lo que la mayoría de la gente pensaría como "relleno").
fuente
Access-Control-Allow-Origin
encabezados que permiten realizar llamadas regulares de Ajax a algunos dominios de origen cruzado.Hay una manera aún más fácil de trabajar con JSONP usando jQuery
El
?
final de la URL le dice a jQuery que es una solicitud JSONP en lugar de JSON. jQuery registra y llama a la función de devolución de llamada automáticamente.Para obtener más detalles, consulte la documentación de jQuery.getJSON .
fuente
&callback=?
ya que no es el primer parámetro en su caso.En respuesta al OP, hay dos problemas con su código: necesita establecer jsonp = 'callback', y agregar una función de devolución de llamada en una variable como lo hizo no parece funcionar.
Actualización: cuando escribí esto, la API de Twitter estaba abierta, pero la cambiaron y ahora requiere autenticación. Cambié el segundo ejemplo a un ejemplo de trabajo (2014Q1), pero ahora estoy usando github.
Esto ya no funciona: como ejercicio, vea si puede reemplazarlo con la API de Github:
aunque alertar () una matriz como esa realmente no funciona bien ... La pestaña "Red" en Firebug te mostrará el JSON correctamente. Otro truco útil es hacer
También puede usar el método jQuery.getJSON . Aquí hay un ejemplo completo de HTML que obtiene una lista de "gists" de github. De esta manera crea una función de devolución de llamada nombrada al azar para usted, esa es la "devolución de llamada =?" Final en la url.
fuente
El código anterior ayuda a obtener imágenes de la API Flicker. Esto usa el método GET para obtener imágenes usando JSONP. Se puede encontrar en detalle aquí.
fuente