XDomainRequest 总是有错误

XDomainRequest always has error

本文关键字:有错误 XDomainRequest      更新时间:2023-09-26

我想知道是否有人可以帮助我解决这个问题,我已经在网上看到了一些使用 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