razón - no access control allow origin header jquery
El nulo de origen no está permitido por Access-Control-Allow-Origin (5)
He creado un pequeño archivo xslt para crear un resultado html llamado weather.xsl con código de la siguiente manera:
<!-- DWXMLSource="http://weather.yahooapis.com/forecastrss?w=38325&u=c" -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="yweather"
xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<img src="{/*/*/item/yweather:condition/@text}.jpg"/>
</xsl:template>
</xsl:stylesheet>
Quiero cargar la salida html en un div en un archivo html que estoy tratando de hacer usando jQuery de la siguiente manera:
<div id="result">
<script type="text/javascript">
$(''#result'').load(''weather.xsl'');
</script>
</div>
Pero recibo el siguiente error: Origen-nulo no está permitido por Access-Control-Allow-Origin.
He leído acerca de cómo agregar un encabezado al xslt, pero no estoy seguro de cómo hacerlo, por lo que cualquier ayuda sería apreciada, y si cargar en la salida html no se puede hacer de esta manera, entonces consejos sobre cómo hacerlo sería genial.
Añadiendo un poco para usar la solución de Gokhan para usar:
--allow-file-access-from-files
Ahora solo necesita agregar el texto anterior en el texto de Destino seguido de un espacio. asegúrese de cerrar todas las instancias del navegador Chrome después de agregar la propiedad anterior. Ahora reinicie Chrome por el ícono donde agregó esta propiedad. Debería funcionar para todos.
Chrome y Safari tienen una restricción sobre el uso de ajax con recursos locales. Es por eso que está arrojando un error como
El nulo de origen no está permitido por Access-Control-Allow-Origin.
Solución: use Firefox o cargue sus datos en un servidor temporal. Si aún desea utilizar Chrome, inícielo con la siguiente opción;
--allow-file-access-from-files
Obtenga más información sobre cómo agregar el parámetro anterior a su Chrome: haga clic con el botón derecho en el icono de Chrome en la barra de tareas, haga clic con el botón secundario en Google Chrome en la ventana emergente y haga clic en Propiedades y agregue el parámetro anterior dentro del cuadro de texto Destino en la pestaña Acceso directo. Le gustará como a continuación;
C:/Users/XXX_USER/AppData/Local/Google/Chrome/Application/chrome.exe --allow-file-access-from-files
Espero que esto ayude!
Me gustaría humildemente agregar que de acuerdo con esta fuente SO: https://.com/a/14671362/1743693 , este tipo de problema ahora se resuelve parcialmente simplemente mediante el uso de la siguiente instrucción jQuery:
<script>
$.support.cors = true;
</script>
Lo intenté en IE10.0.9200, y funcionó inmediatamente (usando jquery-1.9.0.js).
En Chrome 28.0.1500.95 - esta instrucción no funciona (esto sucede en todas partes como se queja david en los comentarios en el enlace de arriba)
Correr Chrome con --allow-file-access-from-files no me funcionó (como dice Maistora arriba)
Origin null
es el sistema de archivos local, por lo que sugiere que está cargando la página HTML que realiza la llamada de load
a través de un file:///
URL (por ejemplo, simplemente haciendo doble clic en un explorador de archivos local o similar). Los diferentes navegadores adoptan diferentes enfoques para aplicar la Política del mismo origen a los archivos locales.
Supongo que estás viendo esto usando Chrome. Las reglas de Chrome para aplicar el SOP a los archivos locales son muy estrictas, incluso no permite cargar archivos desde el mismo directorio que el documento. Lo mismo ocurre con Opera. Algunos otros navegadores, como Firefox, permiten un acceso limitado a los archivos locales. Pero, básicamente, usar ajax con recursos locales no funcionará en todos los navegadores.
Si solo está probando algo localmente que realmente implementará en la web, en lugar de usar archivos locales, instale un servidor web simple y realice una prueba a través de http://
URL en su lugar. Eso le da una imagen de seguridad mucho más precisa.
Solo quería agregar que la respuesta "ejecutar un servidor web" parece bastante desalentadora, pero si tiene Python en su sistema (instalado por defecto al menos en MacOS y en cualquier distribución de Linux) es tan fácil como:
python -m http.server # with python3
o
python -m SimpleHTTPServer # with python2
Entonces, si tiene su archivo html myfile.html
en una carpeta, digamos mydir
, todo lo que tiene que hacer es:
cd /path/to/mydir
python -m http.server # or the python2 alternative above
Luego, dirija su navegador a:
http://localhost:8000/myfile.html
¡Y terminaste! Funciona en todos los navegadores , sin deshabilitar la seguridad web, permitiendo archivos locales o incluso reiniciando el navegador con opciones de línea de comando.