0

我知道这已经被访问了很多,并且我已经设法让它与其他项目一起工作。我继承了在 IE 中不起作用的这段代码:

function loadTemplate(template, alt_cache_name) {
    if (templates[template] !== undefined) {
        if (alt_cache_name !== undefined) {
            templates[alt_cache_name] = templates[template];
        }
        return templates[template];
    } else {

        return $.get(template, function (response) {
            if (alt_cache_name !== undefined) {
                templates[alt_cache_name] = response;
            }
            templates[template] = response;
        }, 'text');
    }
}

问题在于 $.get()。

的值template是特定 html 模板的 url。

我尝试了以下方法,但我认为返回类型与 $.get() 返回的类型不同:

function createCORSRequest(method, url) {
    var xhr = new XMLHttpRequest();
    if ("withCredentials" in xhr) {
        xhr.open(method, url, true);
    } else if (typeof XDomainRequest != "undefined") {
        xhr = new XDomainRequest();
        xhr.open(method, url);
    } else {
        xhr = null;
    }
    return xhr;
}


function loadTemplate(template, alt_cache_name) {
    if (templates[template] !== undefined) {
        if (alt_cache_name !== undefined) {
            templates[alt_cache_name] = templates[template];
        }
        return templates[template];
    } else {

        var request = createCORSRequest("GET", template);
        var content = "";
        if (request) {
            request.onload = function () {
                //do something with request.responseText
                console.log(request.responseText);
                if (alt_cache_name !== undefined) {
                    templates[alt_cache_name] = response.responseText;
                }
                templates[template] = response.responseText;
            };
        }

        return request;


        //            return $.get(template, function (response) {
        //                if (alt_cache_name !== undefined) {
        //                    templates[alt_cache_name] = response;
        //                }
        //                templates[template] = response;
        //            }, 'text');
    }
}

我什至尝试过$.get

jQuery.support.cors = true;

有人可以阐明如何使其工作吗?

4

2 回答 2

0

事实证明,这里列出的 jQuery 插件起到了作用。进一步阅读后,这篇文章还详细介绍了解决方案。

- 更新 -

经过进一步测试,IE9 和这个库似乎存在一些问题。还有其他人遇到任何问题吗?

于 2012-05-17T01:11:46.060 回答
0

我有一个类似的问题,我无法在运行时使用 IE 8/9 上的 CORS 从 CDN 加载模板。我能够通过从此处包含 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 替换为不同的函数,该函数在运行时确定是使用本机 XMLHttpRequest 还是 XDomainRequest。通过包含它,我已经能够使用 jQuery 和 AngularJS 进行模板的跨域加载。

于 2014-08-18T22:55:23.637 回答