2016-05-31 100 views
0

我使用不同的服务器上的API,我有一个CORS错误,我认为。奇怪的是,它首先没有问题的工作,然后我得到这个错误信息没有'访问控制允许来源'标题出现在与json和jquery请求的资源错误

XMLHttpRequest cannot load http://www.thecocktaildb.com/api/json/v1/1/random.php? tagmode=any&type=POST&format=jsonp. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'myadress.com' is therefore not allowed acces 

我加入crossDomain: "true"和它的工作了一天。现在它不再工作,我已经搜索并尝试了很多我找到的解决方案。但没有任何工作。什么是问题,我如何解决它?试过jsonp而不是json有没有​​和& callback =?什么也没做。我甚至为chrome安装了CORS启用扩展。但同样的错误,我无法控制API本身或托管它的服务器。我怎样才能解决这个问题?以下是我的代码。

 function random() { 
     $(document).ready(function() { 
      $.getJSON("http://www.thecocktaildb.com/api/json/v1/1/random.php", { 
       tagmode: "any", 
       type: "POST", 
       format: 'jsonp', 
       crossDomain: "true" 
      }, function (data) { 
       console.log(data); 

       var result = ""; 
       $.each(data.drinks, function (index, value) { 
        result += "<p>" + value.idDrink + "<p>"; 
        result += "<p>" + value.strDrink + "<p>"; 
       }); 
       $('#result').html(result); 
       console.log(result); 
      }); 
     }); 
    } 
+0

该网站没有设置标题,所以没有什么可以从您的结尾做。 Severside代理是你需要的。 – epascarello

+0

服务器不返回jsonp但是json。然后,您应该使用您自己的服务器来提供请求 –

回答

0

如果我的理解是正确的,你正在做一个AJAX call比你的页面不同的域上。因此,浏览器会阻止它,因为出于安全原因,它通常允许同一来源的请求。当你想做一个跨域请求时,你需要做一些不同的事情。关于如何实现这个教程是使用CORS

普通网页可以使用XMLHttpRequest对象发送和 从远程服务器接收数据,但他们由同一个 同源策略的限制。扩展不限于此。一个分机可以与 远程服务器通话,只要它首先请求 跨域权限。

解决方案:

对于可以只允许访问特定的域:

response.addHeader("Access-Control-Allow-Origin", "http://www.thecocktaildb.com"); 

检查这个blog post

0

我认为你可以做一些绕过CORS错误的修改。但目标环境也可以阻止CORS请求。当我使用Paypal结帐时,我遇到了同样的问题。贝宝环境不接受CORS请求。

这样就可以尝试通过服务器端进行此调用。

相关问题