jquery - res - ajax cross domain



L'origine nulle n'est pas autorisée par Access-Control-Allow-Origin (4)

J'ai fait un petit fichier xslt pour créer une sortie html appelée weather.xsl avec du code comme suit:

<!-- 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>

Je veux charger dans la sortie html dans un div dans un fichier html que j'essaye de faire en utilisant jQuery comme suit:

<div id="result">
<script type="text/javascript">
$('#result').load('weather.xsl');
</script>
</div>

Mais j'obtiens l'erreur suivante: Origin null n'est pas autorisé par Access-Control-Allow-Origin.

J'ai lu sur l'ajout d'un en-tête à la xslt, mais je ne suis pas sûr de savoir comment le faire, donc toute aide serait appréciée, et si le chargement dans le fichier html ne peut pas être fait de cette façon, alors des conseils sur la façon de faire ça serait génial.


Answer #1

Ajout d'un peu pour utiliser la solution de Gokhan pour l'utilisation:

--allow-file-access-from-files

Maintenant vous avez juste besoin d'ajouter le texte ci-dessus dans le texte cible suivi d'un espace. assurez-vous de fermer toutes les instances du navigateur chrome après avoir ajouté la propriété ci-dessus. Maintenant, redémarrez chrome par l'icône où vous avez ajouté cette propriété. Cela devrait fonctionner pour tous.


Answer #2

Chrome et Safari ont une restriction sur l'utilisation d'ajax avec des ressources locales. Voilà pourquoi il lance une erreur comme

L'origine nulle n'est pas autorisée par Access-Control-Allow-Origin.

Solution: Utilisez Firefox ou téléchargez vos données sur un serveur temporaire. Si vous souhaitez toujours utiliser Chrome, démarrez-le avec l'option ci-dessous;

--allow-file-access-from-files

Pour plus d'informations sur l'ajout du paramètre ci-dessus à votre Chrome: cliquez avec le bouton droit sur l'icône Chrome dans la barre des tâches, cliquez avec le bouton droit sur Google Chrome dans la fenêtre contextuelle, puis cliquez sur Propriétés et ajoutez le paramètre ci-dessus. Il aimera comme ci-dessous;

C:\Users\XXX_USER\AppData\Local\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

J'espère que cela aidera!


Answer #3

Je voulais juste ajouter que la réponse "exécuter un serveur web" semble assez décourageante, mais si vous avez python sur votre système (installé par défaut au moins sur MacOS et n'importe quelle distribution Linux), c'est aussi simple que:

python -m http.server  # with python3

ou

python -m SimpleHTTPServer  # with python2

Donc, si vous avez votre fichier html myfile.html dans un dossier, dites mydir , tout ce que vous avez à faire est:

cd /path/to/mydir
python -m http.server  # or the python2 alternative above

Puis pointez votre navigateur sur:

http://localhost:8000/myfile.html

Et vous avez terminé! Fonctionne sur tous les navigateurs , sans désactiver la sécurité Web, autoriser les fichiers locaux, ou même redémarrer le navigateur avec des options de ligne de commande.


Answer #4

Origin null est le système de fichiers local, ce qui suggère que vous chargez la page HTML qui effectue l'appel via un file:/// URL (par exemple, double-cliquez dessus dans un navigateur de fichiers local ou similaire). Différents navigateurs adoptent différentes approches pour appliquer la politique de même origine aux fichiers locaux.

Je suppose que vous voyez cela en utilisant Chrome. Les règles de Chrome pour appliquer le SOP aux fichiers locaux sont très strictes, il interdit même le chargement de fichiers à partir du même répertoire que le document. Ainsi fait l'opéra. Certains autres navigateurs, tels que Firefox, permettent un accès limité aux fichiers locaux. Mais fondamentalement, l'utilisation d'ajax avec des ressources locales ne fonctionnera pas avec plusieurs navigateurs.

Si vous ne faites que tester localement quelque chose que vous déploierez réellement sur le Web, plutôt que d'utiliser des fichiers locaux, installez un simple serveur Web et effectuez un test via les URL http:// . Cela vous donne une image de sécurité beaucoup plus précise.





html