2015-05-20 18 views
0

我试图从API调用api.brewerydb.com得到jsonp响应。但是,它并没有在回调函数中包装json。这里是我的代码:AngularJSONP请求

app.factory('beer', ['$http',function($http){ 
    var url = "http://api.brewerydb.com/v2/beers?key=MYKEY&application/json&name=oberon&callback=JSON_CALLBACK"; 

    $http.jsonp(url) 
    .success(function(data){ 
     return data; 
    }); 
}]); 

它返回JSON数据,但在我的名字是我传递的URL,它包含了JSON数据的文件出现语法错误。

我发现,API不支持JSONP这就是为什么这不是为我工作了

+0

你是什么意思“我得到一个语法错误在一个文件,其名称是我通过的网址”? –

+0

嘿,我看了BreweryDB的api文档,并在下面发布了一个可能的解决方案。给它一个镜头 - GL! –

回答

0
  1. 你的网址可能不正确的:“../application/json ..”是一个可选HTTP_ACCEPT header per api docs here:breweryDB,因此如果不需要,请将其从var url字符串中移除。

  2. 根据他们的文档,默认返回类型是JSON,因此如果不需要传递额外参数,则不需要传递额外参数。

  3. 试试这个(终点为/Beers)按他们的endpoint doc

var url = " http://api.brewerydb.com/v2/beers?key=MYKEY&name=oberon&callback=JSON_CALLBACK ";

  • 去拿他们的啤酒!
    编辑:代码在这里:http://jsfiddle.net/r47y3mq3/1/复制/粘贴到您的本地开发环境并使用Safari。

    使用Chrome结果在Access-Control-Allow-Origin头关注,因为这里讨论:access-control
  • +0

    我试过这个,它似乎没有改变任何东西。我注意到,虽然其他apis在一个名为JSON_CALLBACK的方法中包装了json响应。像这个。 https://gdata.youtube.com/feeds/api/users/orbitalofficial/uploads?alt=json-in-script&callback=JSON_CALLBACK啤酒api虽然不这样做。这可能是他们的api不接受回调作为参数的问题吗? – user2015858

    +0

    它使用$ http.get(url)或$ http.jsonp(urlWithCallback)在'Safari'中工作..i'll复制/粘贴我在本地开发环境中尝试的代码....所以Chrome(和jsfiddle .net)有一些访问控制问题,如下所述:[access-control-allow-origin-header](http://stackoverflow.com/questions/21102690/angularjs-not-detecting-access-control-allow-origin-标题) –

    +0

    在我的答案中添加了jsfiddle的链接.. GL! –

    0

    我有一些类似的问题。您有name=oberon这是一家啤酒厂,但您正在寻找您的网址中的啤酒。

    如果你尝试:

    var url = "http://api.brewerydb.com/v2/breweries?key=MYKEY&application/json&name=oberon&callback=JSON_CALLBACK"; 
    

    ...你会得到的奥伯伦啤酒厂的所有啤酒的数组。