Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 如何在没有JSONP或控制外部服务器的情况下请求跨域json_Ajax_Angularjs - Fatal编程技术网

Ajax 如何在没有JSONP或控制外部服务器的情况下请求跨域json

Ajax 如何在没有JSONP或控制外部服务器的情况下请求跨域json,ajax,angularjs,Ajax,Angularjs,我正在用Angular JS构建一个应用程序,并使用$http方法向以JSON格式返回数据的公共外部API发出请求 在今天之前,我对这个问题不太了解,所以我尝试使用一个简单的$http.get请求,但显然被阻止了 我看到规避这种情况的方法之一是使用JSONP,但远程服务器没有为此进行配置 我非常困惑,因为我觉得我有一个相当标准的用例(需要从我自己的服务器上无法管理的API获取JSON),但似乎我能找到的唯一解决方案是更改接收响应的服务器发送的HTTP头我无法控制此公共API,因此这与我无关 编辑

我正在用Angular JS构建一个应用程序,并使用
$http
方法向以JSON格式返回数据的公共外部API发出请求

在今天之前,我对这个问题不太了解,所以我尝试使用一个简单的
$http.get
请求,但显然被阻止了

我看到规避这种情况的方法之一是使用JSONP,但远程服务器没有为此进行配置

我非常困惑,因为我觉得我有一个相当标准的用例(需要从我自己的服务器上无法管理的API获取JSON),但似乎我能找到的唯一解决方案是更改接收响应的服务器发送的HTTP头我无法控制此公共API,因此这与我无关

编辑:我看过一些关于这种情况下的解决方案的文章,在我控制的后端上放置代理并通过它发送请求,但我对安全地实现这一点有点不确定,我能找到的唯一解决方案都是至少4年前的。。。有人能为我指出一个安全的易于实现的PHP代理的正确方向吗

EDIT2:我有一个标准的LAMP设置。

如果您使用Apache(来自示例):


如果使用nginx,则该示例(在服务器上):

在“服务器{”之前的某个地方:

upstream api {
    server 8.8.8.8:4000; 
}
您的请求将在外部服务器上代理

$http.get('/api/posts/').success(function(response) {
       alert(response);
    });

是的,这是您从浏览器运行的唯一选项。如果您无法控制API,您可以在某个后端上开发一个代理,使您的Angular应用程序能够访问原始API。谢谢,您可以为我编辑的问题提供任何指点吗?如果您需要使用prox,请记住一件重要的事情y方法是,许多服务都有一个请求限制,可以是通过IP,也可以是通过客户id。因此,首先检查限制是什么,并可能创建一个缓存响应的代理(如果可能),可能会自己限制每位访客的请求,以及如果您达到该限制会发生什么。当然,这不是一个开放的代理。@t.niese谢谢,但我认为在这个用例中它不相关,因为我请求的是有关城市自行车租赁计划的实时数据,因此数据会经常更改,我无法推理y缓存它而不每分钟执行1000次请求好的,我更了解您建议的解决方案在我的设置中如何工作。它安全吗?它看起来比在PHP中设置更复杂的代理更简单,但我担心这种简单性是要付出代价的
upstream api {
    server 8.8.8.8:4000; 
}
$http.get('/api/posts/').success(function(response) {
       alert(response);
    });