gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:30:02 24 4
gpt4 key购买 nike

我有这个:

          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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com