我尝试使用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!');
}
}
任何人都可以给我的任何建议都会非常感激,因为我考虑在我自己的服务器上使用PHP中的file_get_contents()
来简单地镜像Web服务,尽管这会是最后的手段,因为它会吞噬带宽更多。
答案 0 :(得分:1)
答案 1 :(得分:0)
我也遇到了这个问题,因为客户端的网络服务限制,所有来自internete的解决方案都失败了或者不适用。 (JSONP,XDR,CORD)
为此,我在我的页面中添加了一个iframe,它位于客户端的服务器中。因此,当我们将数据发布到iframe和iframe然后将其发布到网络服务时。因此,消除了跨域引用。
我们添加了双向来源检查,以确认只有授权页面向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);
}