1

我想知道是否有人可以帮助我,我在网上看到了一些使用 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 给我带来了很多问题。我真的希望有人可以提供帮助,在此先感谢。

4

1 回答 1

1

我通过坚持 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://...”而发生错误。

因此,在确保我的响应标头包含“Access-Control-Allow-Origin”标头后,我上传了它工作正常的页面。

此站点包含有关 XDomainRequest 的更多信息:http: //blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

于 2012-05-01T10:16:18.297 回答