如何在IE9及更早版本中进行非JSONP跨域Ajax调用

时间:2013-12-20 12:37:39

标签: javascript ajax internet-explorer internet-explorer-9 cors

我想调用以下Web服务

var url = 'search.php',
    data = {
        addressdetails: 1,
        format: 'json',
        osmtype: 'node',
        q: 'london'
    };

$.ajax('//open.mapquestapi.com/nominatim/v1/' + url, {
    type: 'GET',
    data: data,
    contentType: 'application/json',
    success: function (data, status) {
        var results = [];
        if (status === 'success' && !data.error) {
            console.log('success');
        }
    },
    error: function(jqXHR, textStatus, errorThrown ) {
        console.log('error');
    }
});

我用这个例子创建了一个JSFiddle:http://jsfiddle.net/JX27m/1

我被告知IE8 +支持跨源资源共享(CORS),所以应该有一种方法来调整这段代码以使其在IE9上运行,对吗?

干杯, 克里斯托夫

2 个答案:

答案 0 :(得分:1)

假设有问题的服务器支持CORS并允许您的来源,您可以使用IE的XDomainRequest对象而不是XMLHttpRequest。 jQuery并没有为你做到这一点,因为jQuery团队觉得XDR对象存在太多问题(this ticket中的细节,靠近底部),但你可以自己做,或者有jQuery的插件提供该功能。例如,this one是从同一个jQuery票证链接的。

答案 1 :(得分:1)

检查CanIUse.com,您会看到IE 8& 9有部分支持。我的猜测是因为CORS实际上并没有在规范中作为CORS引入到2009年(在IE 8之后并且在IE 9中出现太迟)。他们可能实现了对Access Control for Cross-Site Requests的支持,最终成为了CORS。他们似乎支持XDomainRequest Object跨域请求。选中“我可以使用资源”选项卡查找其他一些文章。