如何从URL获取JSON对象

时间:2016-08-02 20:30:46

标签: javascript json web

我对网络开发很陌生。

当我输入此链接时

https://api.locu.com/v1_0/venue/search/?name=jimmy%20johns&api_key=b1f51f4ae241770f72fca5924d045733c4135412

进入我的浏览器,我可以看到JSON对象。

我需要做什么才能在javascript中使用这个JSON对象?我尝试过使用JQuery的$.getJSON但没有运气。

修改

使用JSONP工作了!追加& jsonp = readJSON&?callback =?到URL给了我我想要的JSON。感谢您提供所有信息丰富的答案。

$.getJSON( "https://api.locu.com/v1_0/venue/search/?name=jimmy%20johns&api_key=b1f51f4ae241770f72fca5924d045733c4135412&jsonp=readJSON&?callback=?", function() {
        console.log( "success" );
    })

    function readJSON(response){
      console.log (response);
    }

4 个答案:

答案 0 :(得分:2)

问题是,这个域(api.locu.com)与您提供文件的位置相同吗?我想它不是。在这种情况下,您有两个选择:

  • 您的后端可以代理此网站的请求
  • 如果API
  • 支持,您必须使用JSONP对象

答案 1 :(得分:0)

如果您使用JQuery,这应该得到概念......但您可以使用任何东西。

let mapViewController = MapViewController()
self.view.addSubview(mapViewController.view)

现在,我注意到你使用的是getJSON,它几乎完全相同。但是我没有看到你使用成功功能,所以如果你按照自己的方式行事,你试过了吗?

var url = "https://api.locu.com/v1_0/venue/search/?name=jimmy%20johns&api_key=b1f51f4ae241770f72fca5924d045733c4135412";
var result;
var settings = {
  success: function(data){
    result = data;
    //do anything else related to this data here as you need it fetched, and is not linear.
  }
}
$.ajax(url, settings);

我可能会弄错,但你说:“没有运气”所以我对你用$.getJSON(url, function(data){ result = data; });

尝试的内容了解有限

答案 2 :(得分:0)

不是直接来自网络浏览器,没有。您需要使用代理:代表您发出此请求的另一台服务器,然后为您提供结果。

为什么不呢?

Web浏览器在安全方面非常紧张。保护用户免受恶意活动的策略之一是限制Javascript可以向其发出HTTP请求的域。

从您的域( origin )到另一个域的HTTP请求称为跨源请求。这些都是默认禁止的,除非收到的HTTP响应包含标题Access-Control-Allow-Origin,否则您无法读取响应正文。

那怎么样?

使用代理作为中介。代理不是网络浏览器,它不关心Access-Control-Allow-Origin,并且无论如何都会读取响应。

您可以使用许多代理。一个简单的是YQL( Yahoo Query Language )。这是一篇关于该主题的文章,使用jQuery:http://ajaxian.com/archives/using-yql-as-a-proxy-for-cross-domain-ajax

答案 3 :(得分:0)

我不清楚你的问题,但我认为你可以使用ajax调用,例如:

$.ajax({                       
     url: "https://api.locu.com/v1_0/venue/search/?name=jimmy%20johns&api_key=b1f51f4ae241770f72fca5924d045733c4135412",
     type: 'get',
     cache: false,
     success: function (response) {
         console.log(response);
     }
});