2010-11-08 73 views
0

我正在构建一个本地html文件,以动态显示XML文件中的一些数据并使用Chrome的Inspector我想我的XML文件未被解析,因为它“不在Web服务器上”托管Ajax解析本地XML

XMLHttpRequest cannot load data.xml. Cross origin requests are only supported for HTTP. 

我知道有几个标志,我可以通过Chrome浏览器/ Web浏览器来解决此限制,但我寻找到了一些替代方法。我可能不得不将这些文件分发给几个人,并教他们如何将标志传递给浏览器对我来说不是一种选择。将它们托管在Web服务器上也不是一个选项。

非常感谢。

回答

1

除非您设置本地服务器或在本地托管XML文件,否则无ghost。 Ajax必须遵循same origin policy

0

如何设置本地网络服务器?即使是新手也应该​​易于安装XAMPP。告诉他们把文件放到htdocs文件夹中,运行xampp并启动apache服务器。

+0

我明确指出我不想为此运行网络服务器。 – nmuntz 2010-11-08 22:42:38

+0

@nmuntz我也会提示XAMPP,我不觉得你的说明*清楚地说*不对本地web服务器说。 – zzzzBov 2010-11-08 22:53:19

+0

我认为没有更简单的方法来做到这一点。对于大多数人来说,安装xampp比改变一些模糊的浏览器标志更容易。 – arifwn 2010-11-08 22:58:35

1

如果你愿意用你可以用jQuery's AJAX method执行跨域请求库(我不完全肯定的是,jQuery将支持你想要做什么)。 JSONP的作品,但你有XML数据...

无论如何,你可以尝试加载它在script标签,看看你是否可以不破坏脚本得到innerHTML值;一旦你完成从中获取文本,从页面中删除脚本。在浏览器尝试解析脚本之前,您可以通过将onloadonreadystatechange事件附加到脚本元素来获取数据。

var s = document.createElement('script'); 
s.src = '/path/to/file.xml'; 
s.onload = s.onreadystatechange = getData; 
function getData(e) 
{ 
    //get the text out of the script element 
    //remove the event handler from the script element 
    //remove the script from the page 
} 
document.getElementsByTagName('body')[0].appendChild(s); 

我没有测试它,但它可能工作。

0

除非有令人信服的理由有一个单独的html和xml文件,否则您可以直接将数据放在html文件中。

0

恐怕如果chrome只提供了你不喜欢应用的选项,你的应用程序和chrome就不会在一起。通过iframe访问&对象does not工作太多,load() - createDocument的方法不被chrome支持(如果它的确我猜你有同样的错误)。
无论您尝试什么都会通过Chrome的限制,什么都不好,因为我认为他们有很好的理由来设置这些限制。