Un enfoque que me gusta usar es rellenar / envolver el json con un objeto literal y luego guardar el archivo con una extensión de archivo .jsonp. Este método también deja su archivo json original (test.json) sin modificaciones, ya que en su lugar trabajará con el nuevo archivo jsonp (test.jsonp). El nombre en el contenedor puede ser cualquier cosa, pero debe ser el mismo nombre que la función de devolución de llamada que utiliza para procesar el jsonp. Usaré su test.json publicado como ejemplo para mostrar la adición del contenedor jsonp para el archivo 'test.jsonp'.
json_callback({"a" : "b", "c" : "d"});
A continuación, cree una variable reutilizable con alcance global en su secuencia de comandos para contener el JSON devuelto. Esto hará que los datos JSON devueltos estén disponibles para todas las demás funciones en su script en lugar de solo la función de devolución de llamada.
var myJSON;
Luego viene una función simple para recuperar su json mediante inyección de script. Tenga en cuenta que no podemos usar jQuery aquí para agregar el script al encabezado del documento, ya que IE no es compatible con el método jQuery .append. El método jQuery comentado en el código a continuación funcionará en otros navegadores que admitan el método .append. Se incluye como referencia para mostrar la diferencia.
function getLocalJSON(json_url){
var json_script = document.createElement('script');
json_script.type = 'text/javascript';
json_script.src = json_url;
json_script.id = 'json_script';
document.getElementsByTagName('head')[0].appendChild(json_script);
// $('head')[0].append(json_script); DOES NOT WORK in IE (.append method not supported)
}
Lo siguiente es una función de devolución de llamada corta y simple (con el mismo nombre que el contenedor jsonp) para obtener los datos de resultados json en la variable global.
function json_callback(response){
myJSON = response; // Clone response JSON to myJSON object
$('#json_script').remove(); // Remove json_script from the document
}
Ahora se puede acceder a los datos json mediante cualquier función del script utilizando la notación de puntos. Como ejemplo:
console.log(myJSON.a); // Outputs 'b' to console
console.log(myJSON.c); // Outputs 'd' to console
Este método puede ser un poco diferente de lo que está acostumbrado a ver, pero tiene muchas ventajas. Primero, el mismo archivo jsonp puede cargarse localmente o desde un servidor usando las mismas funciones. Como beneficio adicional, jsonp ya está en un formato amigable entre dominios y también se puede usar fácilmente con API de tipo REST.
De acuerdo, no hay funciones de manejo de errores, pero ¿por qué necesitarías una? Si no puede obtener los datos json utilizando este método, puede apostar que tiene algunos problemas dentro del json en sí, y lo comprobaría en un buen validador JSON.
JSON
cadena, ya está recuperando un objeto javascript, no es necesario usarloeval()
.