Estoy haciendo una llamada jQuery ajax desde un archivo local que recupera datos JSON de un servidor web:
$.ajax({ type: 'GET', url: 'http://mywebsite.com/data.json', dataType: 'json', success: showData });y recibo el siguiente error en Chrome:
XMLHttpRequest cannot load http://mywebsite.com/data.json. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.He leído muchas otras respuestas que parecen llegar a la conclusión de que no puede realizar solicitudes ajax desde archivos locales con Chrome, por lo que las soluciones son:
pero ninguna de estas opciones me conviene.
Sin embargo, cuando alojo los datos JSON en otro sitio (myjson.com), para que la línea en la solicitud ajax diga
url: 'https://api.myjson.com/bins/myfile'el archivo carga perfectamente y los datos se muestran correctamente.
¿Por qué se permite la solicitud ajax a 'myjson.com' pero no a 'mywebsite.com'?
Editar:
tengo la linea
Header set Access-Control-Allow-Origin "*"en mi archivo apache2.conf
Lo que debe hacer es crear un archivo .htaccess en la raíz de su documento y agregarle las siguientes líneas:
<FilesMatch "\.(json)$"> Header set Access-Control-Allow-Origin "*" </FilesMatch>Lo que hacen las líneas anteriores es que permiten compartir recursos de origen cruzado para todos los dominios en archivos .json, eliminando así el error.