如何处理外部api JSON而不是JSONP

How to process external api JSON and not JSONP

本文关键字:JSON JSONP api 外部 何处理 处理      更新时间:2023-09-26

我试图调用BreweryDB API,如果我直接去API url (http://api.brewerydb.com/v2/search/geo/point?key=MYKEYHERE&lat=46.8677308&lng=-96.81083149999999&callback=?),它返回看起来像好的json。

{
currentPage: 1,
numberOfPages: 1,
totalResults: 4,
data: [],
status: "success"
}

当我通过jQuery运行json请求时

$.getJSON("http://api.brewerydb.com/v2/search/geo/point?key=MYKEYHERE&
lat=46.8677308&lng=-96.81083149999999&callback=?", function(){console.log("herp my derp");})

它没有成功执行,我打印到控制台的文本也没有执行。在FF中我得到

enter code here SyntaxError: missing ; before statement

如果我删除回调参数,我得到跨站点脚本小调。

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at 
http://api.brewerydb.com/v2/search/geo/point?key=MYKEYHERE&lat=46.867741699999996&lng=-96.811004. 
(Reason: CORS header 'Access-Control-Allow-Origin' missing).

我最初试图使用json,但似乎他们不提供该格式的响应。耶。

如何使用jQuery/Javascript处理这个JSON ?

如何使用jQuery/Javascript处理这个JSON ?

他们会需要添加CORS头或JSONP响应。没有什么可以做在你的端得到这个工作仅使用jQuery/JavaScript -任何解决方案在你的端只将不得不涉及一些服务器端

要避开沙盒限制,请尝试通过您的服务器代理他们的服务。

下面是一个使用PHP的例子:

你JS:

$.getJSON("/brewery.php?lat=46.8677308&lng=-96.81083149999999", function(){console.log("herp my derp");})

brewery.php:

<?php
echo file_get_contents("http://api.brewerydb.com/v2/search/geo/point?key=YOURKEYHERE&lat={$_GET['lat']}&lng={$_GET['lng']}&callback=?");