【问题标题】:Getting JSON Files cross domain for all browsers跨域获取所有浏览器的 JSON 文件
【发布时间】:2013-05-31 17:05:28
【问题描述】:

您好,我已经构建了一个 Web 应用程序,一切正常,直到我在 IE9 上使用来自另一个域的 JSON 文件进行测试

基本上所有的 JSON 文件都存储在 AMAZON 上。

第一次加载的想法是我得到一个 site.json 文件,这会初始化和设置应用程序 - 但在 IE9 中以及在 Safari 和 Chrome 中定期出现跨域错误

所以这是我主页头部的一些摘录

<meta http-equiv="Access-Control-Allow-Origin" content="*"/>

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.0/jquery-ui.min.js"></script>

<script type="text/javascript">

var SiteConfig, frameworkHost;

        $(document).ready(function() {
            var promise = $.ajax({
                url: '//s3-ap-southeast-2.amazonaws.com/****/site.json',
                method: 'get',
                dataType: 'json'
            });

        $.when(promise).then(function(result) {
                SiteConfig = result.data;
                frameworkHost   = '//s3-ap-southeast-2.amazonaws.com/**/public_html';

                var requireTag = document.createElement('script');

                requireTag.setAttribute('type',         'text/javascript');
                requireTag.setAttribute('src',          frameworkHost + '/js/require/require.js');
                requireTag.setAttribute('data-main',    frameworkHost + '/js/bootstrap');

                document.head.appendChild(requireTag);
            });
        });
    </script>

但问题是,一旦获取 site.json 的 url 在 IE9 上不是本地的,它就会失败。

在 chrome 中,以及在带有 ios 5 的 iphone 4s 上的 safari 中,有时我会收到此错误

XMLHttpRequest 无法加载 http://s3-ap-southeast-2.amazonaws.com/*。来源 Access-Control-Allow-Origin 不允许

当我清除缓存时,这仍然有效。它在 FF 上完美运行。

谁能帮忙?

谢谢

【问题讨论】:

标签: javascript jquery json cors cross-domain


【解决方案1】:
if ($.browser.msie && window.XDomainRequest) {
 // Use Microsoft XDR
 var xdr = new XDomainRequest();
 xdr.open("get", "someurl");
 xdr.onload = function () {
 var JSON = $.parseJSON(xdr.responseText);
 if (JSON == null || typeof (JSON) == 'undefined')
 {
    JSON = $.parseJSON(data.firstChild.textContent);
 }
 processData(JSON);
 };
 xdr.send();
} else {
      $.ajax({
      type: 'GET',
      url: "someurl",
      processData: true,
      data: {},
      dataType: "json",
      success: function (data) { processData(data); }
      });
}

【讨论】:

    猜你喜欢
    • 2011-01-20
    • 2012-12-22
    • 1970-01-01
    • 2012-08-27
    • 2017-07-07
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    相关资源
    最近更新 更多