javascript - 尝试使用 JS (Angular) 跨站点 JSON 请求 API

标签 javascript json angularjs cors

我有这个:

          var profileURL = "http://api.steampowered.com/ISteamUser/ResolveVanityURL/v0001/?key=5D1F1F5F31D68C060625DF544BF0E8C4&vanityurl=".concat(profileName);
        var profileJSON = $http.jsonp(profileURL)
          .success(function(data, status, headers, config) {
          console.log(jsonencode(data));
        //console.log(status);
         // console.log(headers);
         // console.log(config);
      })
      .error(function(data, status, headers, config) {
         // console.log(data);
          //console.log(status);
         // console.log(headers);
         // console.log(config);
      });

如您所见,我正在尝试查询 Steam 服务器。如果我使用 $http.get 而不是 $http.jsonp 我会收到有关跨站点限制的错误。我听说过 CORS,但不知道如何在我的场景中实现它。

任何有关将正确的响应数据导入变量的帮助都很棒。

非常感谢

最佳答案

如果 jsonp 不是一个选项,并且您不介意进行额外的工作,那么一个好的解决方案是编写一个小型反向代理

In computer networks, a reverse proxy is a type of proxy server that retrieves resources on behalf of a client from one or more servers. These resources are then returned to the client as though they originated from the proxy server itself. wikipedia - reverse proxy

您可以使用任意数量的 http 服务器框架编写反向代理,例如 Nancy对于 C# 或 node.js javascript 服务器/coffeescript .

重要的是确保代理在与您的 Angular 应用程序相同的域下运行。现在,您可以通过代理路由 Angular 应用程序中的所有 ajax 调用,因为它在同一域中,所以没有跨站点问题。

然后代理可以自由地调用你喜欢的任何 API,通常对我来说,这将是我自己的自定义 API,它封装了我所有的业务逻辑以及我需要对第三方 API 进行的任何调用,比如谷歌翻译.代理的工作是进行调用并将 json 返回给 Angular 应用程序。

以这种方式做事有一个额外的好处,即您的代理可以重新打包来自第 3 方 API 的 json,以适应您在 Angular 应用程序中可能拥有的任何标准。这对于处理来自各种来源的错误特别有用。您的代理处理错误并将标准化的错误包传回 Angular 应用程序。

事实上,经验表明,一旦有了代理,您就会开始发现它的许多用途。例如,谁会想要从 Angular 调用需要 secret API key 的 API?这样做会在您的客户端代码中公开 key ,以供任何人滥用。使用代理,所有这些详细信息都安全地隐藏在服务器上。

如果你确实走 node.js 路线,那么考虑使用 request用于进行 http 调用,因为这为代理和管道请求/响应提供了明确的支持。

关于javascript - 尝试使用 JS (Angular) 跨站点 JSON 请求 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28040007/

相关文章:

javascript - 如何从下拉菜单 Angular 加载模板

javascript - 在表格中添加一行后添加分隔符

javascript - 为什么我不能覆盖字符串实例的迭代器而不是 String.prototype?

javascript - 我是否为这个天气应用程序正确设置了 API?

PHP - 显示 Json 编码消息

javascript - 使用 Javascript 将字符串转换为 JSON

javascript - Firebug 的 jQuery 不会在我的网站上加载

javascript - Php magento SESSION 变量在 php 内执行 javascript 代码之前未设置

javascript - 忽略范围变量的清理

javascript - 在 ng-repeat 中使用指令