当我无法访问服务器时,如何让jQuery调用REST服务而不会出现Access-Control-Allow-Origin错误?

时间:2011-11-16 15:32:55

标签: jquery cross-domain jsonp

我正在尝试使用jQuery查询返回XML的RESTful服务。我无法访问服务器,因此无法更改它提供的输出或标题。

我收到的回复是xml,但当然我收到了跨站点脚本错误。

为了解决这个问题,我尝试使用jsonp,但由于我收到的格式是xml,这也是错误:(资源被解释为Script但是使用MIME类型application / xml进行传输。)。

我确实使用Safari Web Inspector在内容中看到了xml响应,那么有什么办法可以防止出现这个错误并继续使用xml?

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

首先是导致错误的原始ajax查询: XMLHttpRequest无法加载https://the-rest-url/xxx。 Access-Control-Allow-Origin 不允许原点http://127.0.0.1:8020(因为我在我的PC上使用它来开发本地主机 - 我也尝试部署到Web服务器)。

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

接下来是返回xml的jsonp尝试,但是将资源解释为Script但是使用MIME类型application / xml。错误进行传输。我还尝试使用dataType:“jsonp text”和其他变体......

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

非常感谢任何帮助。 感谢。

1 个答案:

答案 0 :(得分:1)

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