javascript json flickr

Flickr JSON devolviendo error en JavaScript de dominio cruzado



(2)

Debido a que está utilizando JSONP , no usa XMLHttpRequest para recuperar el recurso, inyecta un elemento de script con la URL src adecuada, y define una función con el mismo nombre asignado al parámetro jsoncallback que se llamará una vez que se haya cargado el script:

function handleTheResponse(jsonData) { console.log(jsonData); } // ... elsewhere in your code var script = document.createElement("script"); script.src = f.feedUrl; document.head.appendChild(script);

Solo asegúrate de tener jsoncallback=handleTheResponse (o de lo que llames tu método), asegúrate de que el método sea accesible a nivel mundial y deberías estar listo.

Aquí hay una demostración:

function handleTheResponse(data) { document.getElementById("response").textContent = JSON.stringify(data,null,2); } var script = document.createElement("script"); script.src = "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=handleTheResponse&tags=london&tagmode=any&format=json" document.head.appendChild(script);

<pre id="response">Loading...</pre>

Tengo este código y estoy intentando devolver la API de Flickr, sin embargo, obtengo el siguiente error.

Solicitud de origen cruzado bloqueada: la misma política de origen no permite leer el recurso remoto en http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback={callback}&tags=london&tagmode=any&format=json . Esto se puede solucionar moviendo el recurso al mismo dominio o habilitando CORS.

¿Cómo habilito esto en mi código?

enter MyFeed.prototype.getFeed = function(data) { console.log(f.feedUrl); var request = new XMLHttpRequest(); request.open(''GET'', f.feedUrl, true); request.onload = function () { if (request.status >= 200 && request.status < 400) { // Success! console.log(request.responseText); var data = JSON.parse(request.responseText); } else { // We reached our target server, but it returned an error console.log("error"); } }; request.onerror = function () { // There was a connection error of some sort }; request.send(); }here


Hay varias formas de resolverlo, una fácil sería usar jQuery;

asumiendo devolución de llamada en

http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback= {callback} & tags = london & tagmode = any & format = json

callback = "jQuery111203062643037081828_1446872573181"

enter MyFeed.prototype.getFeed = function(data) { $.ajax({ url: f.feedUrl, dataType : "jsonp", success: function(response) { console.log(response); }, error: function (e) { console.log(e); } }); }here

o si quieres esto sin jQuery, que es lo mismo que recomienda @ daniel-flint.

function jsonp(url, callback) { var callbackName = ''jsonp_callback_'' + Math.round(100000 * Math.random()); window[callbackName] = function(data) { delete window[callbackName]; document.body.removeChild(script); callback(data); }; var script = document.createElement(''script''); script.src = url + (url.indexOf(''?'') >= 0 ? ''&'' : ''?'') + ''callback='' + callbackName; document.body.appendChild(script); } jsonp(''http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=callback&tags=london&tagmode=any&format=json'', callback); function callback(data){ console.log(data); }