Quiero obtener algo de contenido JSON de una URL usando JavaScript (jQuery) Ajax, pero siempre falla al cargar los datos.
Mi código es muy simple:
<div id="content"> loading... </div> console.log("jQuery Version: " + jQuery.fn.jquery); $.ajax({ type: "GET", url: "https://www.teamspeak.com/versions/server.json", dataType: "json", success: function(data){ $("#content").html(data); console.log("SUCCESS: " + JSON.stringify(data)); }, error: function(data){ $("#content").html("Failed to load data. " + JSON.stringify(data)); console.log("ERROR: " + JSON.stringify(data)); }, complete: function(data){ console.log("COMPLETED: " + JSON.stringify(data)); }, });La página siempre muestra este contenido:
Failed to load data. {"readyState":0,"status":0,"statusText":"error"} Cuando pruebo dataType: "jsonp" (con la P ) en lugar de dataType: "json" , muestra este contenido:
Failed to load data. {"readyState":4,"status":200,"statusText":"load"} Entonces... ¿Tuvo éxito, pero aún se está cargando? no lo entiendo Cuando abro la URL mencionada anteriormente en mi navegador, puedo ver los datos con formato application/json .
Verifique el resultado del código aquí: https://jsfiddle.net/j2t91osz/1/
No puede completar la llamada porque está realizando una solicitud a una URL que se encuentra en una dirección de host ( www.teamspeak.com ) que es diferente de aquella en la que se implementa la página HTML ( jsfiddle.net ).
Eche un vistazo al mensaje que se muestra en la consola:
El acceso a XMLHttpRequest en 'https://www.teamspeak.com/versions/client.json' desde el origen 'https://fiddle.jshell.net' ha sido bloqueado por la política CORS: No 'Access-Control-Allow-Origin ' el encabezado está presente en el recurso solicitado.
Cuando esto sucede (hosts diferentes), su solicitud está sujeta a la política del mismo origen . En este escenario, el navegador solo permitirá que se complete la solicitud si la respuesta contiene algunos encabezados específicos (por ejemplo Access-Control-Allow-Origin ) que autorizan la llamada. Más detalles aquí.
¿Cómo hacer que funcione?