我正在尝试使用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"
});
非常感谢任何帮助。 感谢。
答案 0 :(得分:1)
除了JSONP之外,我不知道客户端跨域请求的可靠解决方法。虽然从版本1.5开始,jQuery可以以JSON以外的格式接收JSONP responses,但响应必须与JSONP兼容,即在所提供的回调中包含。在您的情况下,您可能别无选择,只能为要请求的数据实现服务器端包装器(here是PHP的示例),以便它看起来来自同一个域。