2016-08-19 89 views
0

我想要消耗第三方Api使用JavaScript和PHP代理在this Tread中看到,我能够使用代理但我得到的响应总是:Ajax跨域Php代理403错误

无法加载资源:服务器与403(禁止) http://MYDOMAIN.co/php/ba-simple-proxy.php?url=http://jsonplaceholder.typicode.com/posts&_=1471620448707

我的javascript代码状态回应是:

function getLocationSimple(){ 
var proxy = 'php/ba-simple-proxy.php', 
    url = proxy + '?url=' + 'http://jsonplaceholder.typicode.com/posts'; 
    console.log(url); 
// Make JSON request. 
    $.getJSON(url, function(data){ 

    console.log(data); 
    }); 
} 

我认为这是对第三方服务器上的权限,因此我决定改变它打开一个 - http://jsonplaceholder.typicode.com/posts - ,但我仍然得到相同的错误,它可能是在我自己的服务器的权限? - 我的主机是hostgator-

+0

http 403错误可能是由于很多原因,你可以看到更多[这里](https://en.wikipedia.org/wiki/HTTP_403)。问题不在于'getLocationSimple'脚本,而可能是'php/ba-simple-proxy.php'里面的内容。 –

回答

0

这与跨域策略有关。由于安全原因,您不能对另一个域执行Ajax请求,因为恶意攻击也可能涉及通过ajax执行请求来加载其他脚本来攻击您。

即使维基百科可能不是最好的链接提供,它会给你一个想法。

https://en.wikipedia.org/wiki/Same-origin_policy

+0

谢谢!我意识到这一点,这就是为什么我试图使用服务器端连接,因此PHP代理,欢呼! – randomguy04

1

让我们尝试一次这段代码

function getLocationSimple(){ 
      $.ajax({ 
       type: 'POST', 
       dataType: 'jsonp', 
       url: "http://jsonplaceholder.typicode.com/posts" 
      }) .done(function(data) { 
       console.log(data); 
       }); 
     } 

出现这种情况是由于跨域策略。跨站点访问在api方面不可用。所以我们可以用dataType: 'jsonp'来解决这个问题

+0

对于我选择的示例非常有用,但是在使用我的真实生活提供程序时遇到了新错误 - >拒绝从htttp:// XXXXX执行脚本,因为它的MIME类型('application/json')不可执行,并且启用严格的MIME类型检查。有没有办法解决这个问题? – randomguy04

+0

http://stackoverflow.com/questions/24528211/refused-to-execute-script-from-because-its-mime-type-application-json-is –