用于IE的JSON后备的CORS

时间:2013-07-17 21:18:04

标签: jquery cross-domain cors

我有以下代码适用于除IE之外的所有浏览器:我得到拒绝访问。请帮忙!!!我看过很多例子但仍然无法解决这个问题。我想保持简单,因为我正在做的是从URL返回一些文本。

<script type="text/javascript">
    // Insure the document is loaded...
    $(document).ready(function() {

        // Set the URL for the POS API...
        var PosApiUrl = 'https://test.safety.com/posapi/getposmessage?app=RMIS';


        // Load the POS API Message...
        function loadPOSMessage(edurl) {

            if (window.XMLHttpRequest) {
                xmlhttp = new XMLHttpRequest();
            } else if (window.XDomainRequest) {
                xmlhttp = new XDomainRequest();
            } else {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    var jsonEdition = xmlhttp.responseText;
                    var objEdition = JSON.parse(jsonEdition);
                    $.each(objEdition, function(key, val) {
                        if (val.length === 0) {
                            $('.posMsgContainer').hide();
                        } else {
                            $('.posMsgContainer').html(val);
                        }


                    });
                }
            };
            xmlhttp.open("GET", edurl, true);
            xmlhttp.send();
        }

        // Make the call to load the POS message...
        loadPOSMessage(PosApiUrl);


    });
  </script>

1 个答案:

答案 0 :(得分:0)

上面的代码不起作用,因为IE的XDomainRequest的API与XMLHttpRequest的API略有不同。例如,代替onreadystatechange(),它使用onload()。

我发现在IE 8/9上支持CORS的最简单方法是从这里包含xhr-xdr-adapter.js文件: https://github.com/intuit/xhr-xdr-adapter/blob/master/src/xhr-xdr-adapter.js

您可以在需要的地方加入,如下所示:

<!--[if lt IE 10]>
<script src="xhr-xdr-adapter.js" type="text/javascript"></script>
<![endif]-->

一旦你包含xhr-xdr-adapter,你就可以使用标准的XMLHttpRequest API,而不用担心你是否在IE 8/9上运行(只要你不需要)做一些喜欢发送自定义标题的东西,或使用GET或POST以外的方法。)