我想知道是否有人可以帮助我解决这个问题,我已经在网上看到了一些使用 XDomainRequest 的例子,但它们并没有很好地解释代码。我正在尝试加载一个 XML 文件,以便我可以解析它。我使用的代码如下。
var xdr = new XDomainRequest();
xdr.onerror =
function ()
{
alert('Error!');
};
xdr.ontimeout =
function ()
{
alert('Timeout!');
};
xdr.onprogress =
function ()
{
alert('Loading...');
};
xdr.onload =
function()
{
alert('File:' + xdr.responseText);
}
xdr.timeout = 10000;
xdr.open("GET","http://www.spectraltechnologies.co.uk/webbuilder2020/Instrument_Lamps_New.txt", false);
xdr.send();
每次我尝试使用它时,它总是返回 xdr.onerror 和随附的警报。它请求的文件最初是一个XML文件,里面是XML格式,但我做了一个.txt副本,因为我知道这是XDomainRequest唯一接受的东西。
我已经能够为Firefox和Chrome浏览器制定解决方案,但是Internet Explorer给我带来了许多问题。我真的希望有人能帮忙,提前谢谢。
我通过坚持 XDomainRequest 的冗长且非常具体的规范来解决这个问题。我的第一个问题是我正在访问的文件/站点的响应标头不正确。
该站点使用".htaccess"文件,因此我能够通过添加以下代码来解决此问题:
<filesMatch "Instrument_Lamps_New.txt$">
<IfModule mod_headers.c>
Header add Access-Control-Allow-Origin "*"
</IfModule>
</filesMatch>
此代码检查正在访问的文件是否是我想要指定标头的文件,然后将其添加到标头中。
我的第二个问题是,使用 XDomainRequest,您只能访问与打开请求的文件具有相同协议的文件,即 http 只打开 http,https 只打开 https。由于调试站点,我从自己的文件系统打开页面,因此由于"file://..."≠"http://..."。
因此,在确保我的响应标头包含"访问控制允许来源"标头并且我上传了页面后,它工作正常。
此站点包含有关 XDomainRequest 的更多信息:http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx