如何在没有访问服务器的情况下获取访问控制 - 允许 - 来源错误的情况下调用REST服务?

问题描述:

我正在尝试使用jQuery来查询返回XML的RESTful服务。我无法访问服务器,因此我无法更改它提供的输出或标题。如何在没有访问服务器的情况下获取访问控制 - 允许 - 来源错误的情况下调用REST服务?

响应我收到的XML,但当然我得到一个跨站点脚本错误。

要解决这个问题,我尝试使用JSONP,但因为我收到的格式是XML,也错误:(资源解释为脚本,但与MIME类型application/XML传输)。

我看到在使用Safari的网络督察内容的XML响应,所以是有办法,我可以防止这种错误,并使用XML进行?

我希望这是有道理的。作为参考,这里是我试过的代码:

首先是原来的ajax查询导致错误:XMLHttpRequest无法加载https://the-rest-url/xxx。来源http://127.0.0.1:8020是不允许的访问控制允许来源(这是本地主机,因为我用我的电脑开发 - 我也尝试部署到Web服务器)。

$.ajax({ 
    url: 'https://the-rest-url/xxx', 
    success: function() {alert("success");}, 
    error: function() {alert("error")} 
}); 

接下来是JSONP尝试返回的XML,而导致资源解释为脚本但与MIME类型application/XML传送。错误。我也试过dataType:“jsonp文本”和其他变化...

 $.ajax({ 
     url: 'https://the-rest-url/xxx', 
     success: function() {alert("success");}, 
     error: function() {alert("error")}, 
     dataType: "jsonp", 
     jsonp: "jsonpCallback" 
}); 

任何帮助极大赞赏。 谢谢。

我不知道除了JSONP客户端跨域请求了可靠的解决办法的。虽然自1.5版以来,jQuery可以接收格式为JSON以外的其他格式的JSONP responses,但该响应必须与JSONP兼容,即被包装在提供的回调中。在你的情况下,你可能别无选择,只能为要请求的数据实现服务器端封装(here是PHP的一个示例),以便它似乎来自同一个域。

+0

谢谢。虽然我怀疑它,但我希望这不会是答案;)最终,我想将它放到Google Gadget中,所以我无法使用服务器端封装器吗?或者,Google Gadgets完全有另一种方式吗?再次感谢。 – Darren

+0

那么没有什么阻止你创建一个返回JSONP的包装器。 – Daff