我可以通过 JQuery 成功地从我的本地 Rest api 访问数据,但是当我尝试通过 JQuery 从远程 Rest API(托管在其他域)访问数据时,我得到了未定义的错误。我如何解决跨域问题?
这就是我通过JQuery使用的方式。
function GetCompanyName(id) {
jQuery.support.cors = true;
$.ajax({
url: 'http://novacompanysvc.azurewebsites.net/api/companies',
type: 'GET',
data:{ id:id },
dataType: "text/xml",
success: function (data) {
if (window.DOMParser)
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(data,"text/xml");
}
else // Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(data);
}
WriteResponse(data);
},
error: function (x, y, z) {
alert('error');
}
});
}
发生此错误是因为您正在访问的 API 端点未实现 CORS。如果您在 Chrome 中运行代码并查看控制台,则会看到一个错误:
XMLHttpRequest cannot load http://novacompanysvc.azurewebsites.net/api/companies?id=1. Origin http://fiddle.jshell.net is not allowed by Access-Control-Allow-Origin.
解决方案是更改 API 端点,将 Access-Control-Allow-Origin
标头设置为通配符*
或将提供使用 JavaScript 代码的页面的域。
我也面临着同样的问题。
现在它由我解决。假设您有两个域。域 1 和域 2
您可以使用此技术。
在域1中使用服务器端脚本创建中间层,可以使用java,PHP等从域2获取数据,然后在域1中创建休息服务,在域1中使用休息服务。
我也面临这个问题。 我通过以下方式解决这个问题
避免混合内容阻塞是将所有内容作为HTTPS而不是HTTP提供。
对于您自己的域,将所有内容作为HTTPS提供并修复您的链接。
你放: http//到 https//
对于其他域,请使用站点的 HTTPS 版本(如果可用)。如果 HTTPS 不可用,您可以尝试联系域并询问他们是否可以通过 HTTPS 提供内容。