跨域获取所有浏览器的 JSON 文件
Posted
技术标签:
【中文标题】跨域获取所有浏览器的 JSON 文件【英文标题】:Getting JSON Files cross domain for all browsers 【发布时间】: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 上完美运行。
谁能帮忙?
谢谢
【问题讨论】:
尝试在你的 ajax 中将 dataType: 'json' 更改为 dataType: 'jsop' 不,这不起作用 - 不加载 json cypressnorth.com/blog/programming/… 【参考方案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);
);
【讨论】:
以上是关于跨域获取所有浏览器的 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章