我创建了一个小的xslt文件来创建一个名为weather. xsl的html输出,代码如下:
<!-- 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>
我想将html输出加载到html文件的div中,我尝试使用jQuery执行此操作,如下所示:
<div id="result">
<script type="text/javascript">
$('#result').load('weather.xsl');
</script>
</div>
但我得到了以下错误:访问控制允许来源不允许来源为空。
我读过关于在xslt中添加一个头的文章,但是我不知道怎么做,所以任何帮助都将是感激的,如果在html输出中加载不能这样做,那么关于如何做的建议将是伟大的。
8条答案
按热度按时间2hh7jdfx1#
Origin
null
是本地文件系统,因此这意味着您正在通过file:///
URL加载执行load
调用的HTML页面(例如,只需在本地文件浏览器或类似的浏览器中双击它)。大多数浏览器将Same Origin Policy应用于本地文件,甚至不允许从与文档相同的目录加载文件。(过去Firefox允许相同的目录和子目录,但现在不允许了。
基本上,使用 AJAX 和本地资源是行不通的。
如果您只是在本地测试一些您将真正部署到Web上的东西,而不是使用本地文件,安装一个简单的Web服务器,然后通过
http://
URL进行测试,这样可以更准确地了解安全性。IDE很可能内置了某种服务器(直接或通过扩展),您只需在IDE中单击“运行”,就可以启动服务器并提供文件。kt06eoxx2#
Chrome和Safari对 AJAX 使用本地资源有限制,这就是为什么它会抛出这样的错误
**解决方案:**使用firefox或将您的数据上传到临时服务器。如果您仍然想使用Chrome,请使用以下选项启动它;
**更多信息如何添加上述参数到您的Chrome浏览器:**右键单击任务栏上的Chrome浏览器图标,右键单击弹出窗口中的Google Chrome浏览器,然后单击属性,并将上述参数添加到快捷方式选项卡下的目标文本框中。
希望这会有帮助!
6ojccjat3#
我只想补充一点,“运行一个Web服务器”的答案似乎相当令人生畏,但如果你的系统上有python(默认情况下至少安装在MacOS和任何Linux发行版上),它就像这样简单:
或
因此,如果您的html文件
myfile.html
在一个文件夹中,比如mydir
,您所要做的就是:然后将浏览器指向:
这样就大功告成了!适用于所有浏览器,无需禁用网络安全,允许本地文件,甚至无需使用命令行选项重新启动浏览器。
piv4azn74#
我想谦虚地补充说,根据这一SO来源:https://stackoverflow.com/a/14671362/1743693,现在只需使用下面的jQuery指令就可以部分解决这种问题:
我在IE10.0.9200上试用了它,它立即工作了(使用jquery-1.9.0.js)。
在chrome 28.0.1500.95上--这个指令不起作用(david在上面链接的评论中抱怨说这种情况到处都有)
使用--allow-file-access-from-files运行chrome对我来说不起作用(正如Maistora在上面所说的)
esyap4oy5#
添加一点使用Gokhan的解决方案使用:
现在你只需要在目标文本中添加上面的文本,后面跟一个空格。添加上述属性后,请确保关闭chrome浏览器的所有示例。现在通过添加此属性的图标重新启动chrome。它应该对所有示例都有效。
mec1mxoz6#
我正在寻找一个从本地HTML文件向服务器发出XHR请求的解决方案,并找到了一个使用Chrome和PHP的解决方案。(没有Jquery)
Javascript:
我的Chrome浏览器的请求标头
Origin: null
我的PHP响应头(注意'null'是一个字符串)。HTTP_REFERER允许从一个远程服务器到另一个服务器的跨源。
我能够成功连接到我的服务器。您可以忽略Credentials标头,但在启用Apache的
AuthType Basic
时,这对我有效我测试了与FF和Opera的兼容性,它在许多情况下工作,如:
从虚拟机LAN IP(192.168.0.x)返回到虚拟机的WAN(公共)IP:端口
从VM LAN IP返回到远程服务器域名。
从本地.HTML文件到VM LAN IP和/或VM WAN IP:端口,
从本地.HTML文件转换为远程服务器域名。
等等。
pprl5pva7#
您可以使用source标记加载本地Javascript文件(在
file:/
源代码页面下的树中):如果您将输入编码为Javascript,例如:
我的数据.js:
(this对于json来说更容易),那么您就可以在Javascript全局变量中使用“data”,以便根据需要使用。
flseospp8#
使用Java Spring来运行Web服务,您需要添加:
@ServletComponentScan
,位于自动生成的YouAppApplication.java文件(带有main()函数的文件)中@SpringBootApplication
的正上方,并使用以下实现创建一个类:请注意,只要该类实现了Filter并具有
@WebFilter
注解,您就可以为该类选择不同的名称。您还可以提供与/*
不同的通配符,以便此Filter不适用于每个端点。正如@ LouisLoudogTrottier所指定的,在创建 AJAX 请求时需要添加
...withCredentials = true;
才能使其工作。