1

我可以通过 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');
     }
  });
}
4

3 回答 3

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 代码的页面的域。

于 2013-10-13T10:49:27.077 回答
0

我也面临同样的问题。

现在它由我解决。假设您有两个域。域 1 和域 2

你可以使用这种技术。

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

于 2016-07-15T12:28:40.120 回答
-1

我也面临这个问题。我解决了这个问题

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

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

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

于 2017-11-20T12:21:05.283 回答