2

我正在尝试使用 jQuery 访问 REST Web 服务。根据 Firebug,该服务已正确地将 Access-Control-Allow-Origin 设置为 *,并且使用 Chrome/Firefox 访问它没有问题。但是,在 IE 中它不起作用。

我已经查看了已经发布的这个问题的很多变体,但到目前为止,没有一个解决方案对我有用。

这是我的代码(为了便于阅读,简化了成功/失败函数内容):

$.support.cors = true;
$.ajax({
   url: 'https://api.guildwars2.com/v1/maps.json?callback=?',
   cache: false,
   type: 'POST',
   dataType: "jsonp",
   success: function() { alert("Success!"); },
   error: function() { alert('Failed!'); }
});

它也不能GET作为类型使用,也不能使用或不使用回调。

我也试过让它在没有 jQuery 的情况下工作,但没有成功:

var xdr = new XDomainRequest();
var url = "https://api.guildwars2.com/v1/maps.json?callback=?";
if(window.XDomainRequest)
{
    if(xdr)
    {
        xdr.onsuccess = function(){alert('Success!');};
        xdr.open("get",url);
        xdr.send();
    }
    else
    {
        alert('Failed!');
    }
}

任何人可以给我的任何建议都将不胜感激,因为我正在考虑file_get_contents()在我自己的服务器上使用 PHP 简单地镜像 Web 服务,尽管这将是最后的手段,因为它会占用更多的带宽。

4

2 回答 2

1

这个插件为我解决了。

https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

于 2015-01-06T22:46:31.233 回答
0

我也遇到了这个问题,来自互联网的所有解决方案要么失败,要么由于客户端 Web 服务限制而不适用。(JSONP、XDR、CORD)

为此,我在我的页面中添加了一个 iframe,它位于客户端的服务器中。因此,当我们将数据发布到 iframe 时,iframe 然后将其发布到 web 服务。因此消除了跨域引用。

我们添加了 2 路来源检查,以确认仅授权页面将数据发布到 iframe 和从 iframe 发布数据。

希望能帮助到你

<iframe style="display:none;" id='receiver' name="receiver" src="https://iframe-address-at-client-server">
 </iframe>

//send data to iframe
var hiddenFrame = document.getElementById('receiver').contentWindow;
hiddenFrame.postMessage(JSON.stringify(message), 'https://client-server-url');

//The iframe receives the data using the code:
window.onload = function () {
    var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
    var eventer = window[eventMethod];
    var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
    eventer(messageEvent, function (e) {
        var origin = e.origin;
        //if origin not in pre-defined list, break and return
        var messageFromParent = JSON.parse(e.data);
        var json = messageFromParent.data;

        //send json to web service using AJAX   
        //return the response back to source
        e.source.postMessage(JSON.stringify(aJAXResponse), e.origin);
    }, false);
}
于 2014-12-17T17:08:25.207 回答