如何访问在其他域托管的Rest API数据。跨域问题

时间:2013-10-13 10:34:07

标签: jquery ajax api rest cross-domain

我可以通过JQuery从我的本地Rest api成功访问数据,但是当我尝试通过JQuery从远程Rest API(托管在其他域)访问数据时,我得到的错误是Undefined。 我如何解决跨域问题?

这就是我通过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');
     }
  });
}

3 个答案:

答案 0 :(得分:1)

发生此错误是因为您正在访问的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 :(得分:0)

我也遇到了同样的问题。

现在我已经解决了。 假设您有两个域名。 domain1和domain2

你可以使用这种技术。

使用domain1中的服务器端脚本创建中间层,您可以使用java,PHP等从domain2获取数据,然后在domain1中创建休息服务并在domain1中使用rest服务。

答案 2 :(得分:-1)

我也面临这个问题。我通过

来解决这个问题

避免混合内容阻止是将所有内容作为HTTPS而不是HTTP提供。

对于您自己的域将所有内容作为HTTPS提供并修复您的链接 你放了:http //到https //

对于其他域,请使用该网站的HTTPS版本(如果有)。如果HTTPS不可用,您可以尝试联系域并询问他们是否可以通过HTTPS提供内容。