用于检索数据的JSON或JSONP查询

时间:2015-01-22 13:32:51

标签: jquery ajax json jsonp

关于此类问题,有很多问题,例如:

Basic example of using .ajax() with JSONP?

但我似乎无法让任何一个人得到明智的结果。

我已经获得了一个API调用过程(我相信它基于REST API)从服务器检索值,它看起来像这样:

http://stage.xxxxxxxxx.co.uk/Search/?q=london&srid=3857&format=json&api_key=xxxxxxxxxxxxxxxxxxxxxxxx

由于显而易见的原因,我必须使用xxxxx,尤其是密钥。

将此提交到IE等Web浏览器会返回看似JSON对象的内容,如下所示:

{
    "features": [
        {
            "id": 2728329,
            "name": "LONDON",
            "city": null,
            "county": "LONDON",
            "address": "LONDON",
            "address_2": null,
            "display_text": "LONDON LONDON",
            "geometry": {
                "type": "Point",
                "coordinates": [
                    -16004.689675,
                    6708355.967961
                ]
            },
            "lon": -16004.689675330877,
            "lat": 6708355.967960811
        }
    ]
}

我遇到的麻烦是尝试使用jQuery将此对象检索为JSON对象(甚至是字符串)。

我很快发现XMLHttpRequest由于使用了相同的域名而无法正常工作。所以我转向JSONP,但我没有理解如何正确使用它。

例如,我有这个:

$.getJSON("http://stage.xxxxxxxxxxx.co.uk/Search/?q=london&srid=3857&format=json&api_key=xxxxxxxxxxxxxxxxxxxxxxxxx?callback=?", function(result) {
    format: "json"
}); 

我从哪里开始获取上面提到的JSON对象?

2 个答案:

答案 0 :(得分:3)

  

我很快发现XMLHttpRequest由于使用了相同的域名而无法正常工作。所以我转向JSONP,但我没有理解如何正确使用它。

您不能使用JSONP,除非您的通话终端支持它,并且您告诉它您正在请求的内容。那是因为它必须发回不同的格式(JSONP而不是JSON)。

JSON和JSONP根本不同,尽管看起来几乎相同。 JSON响应是一种根据JSON标准定义数据的文本格式(在http://json.org中有松散记录,更正式地在那里有一个RFC); JSONP响应是传入JavaScript对象的函数调用,它将作为脚本代码执行。

这是一个简单的理论JSON查询和响应的示例:

请求:http://example.com/give-me-deh-stuff?format=json&id=foo

响应:

{"stuff": {"foo":"bar"}}

这是一个等效的简单理论JSONP查询和响应示例,您不需要指定回调名称:

请求:http://example.com/give-me-deh-stuff?format=jsonp&id=foo

响应:

callback({"stuff": {"foo":"bar"}})

..和你所在的地方:

请求:http://example.com/give-me-deh-stuff?format=jsonp&callback=_cb12345&id=foo

响应:

_cb12345({"stuff": {"foo":"bar"}})

如果端点支持JSONP,jQuery将很乐意提供回调函数并在URL上设置参数,你只需要告诉它调用的参数是什么(如果你不这样做,它会假设callback ,许多API使用,许多其他人不使用。

现在请注意,JSONP版本正在调用函数(callback_cb12345)。您的代码(或jQuery)确保在全局范围内可以使用该名称的函数,然后使用请求URL附加脚本,并在它返回时运行。 JSONP是如何避免同源策略的。

答案 1 :(得分:-1)

可以通过JsonSchema对象使用JSON.NET来完成

以下是从JSON

中检索数据的简单示例
string schemaJson = @"{
  'description': 'A person',
  'type': 'object',
  'properties': {
  'name': {'type':'string'},
  'hobbies': {
  'type': 'array',
 'items': {'type':'string'}
  }
 }
}";

JsonSchema schema = JsonSchema.Parse(schemaJson);

Console.WriteLine(schema.Type);
// Object

foreach (var property in schema.Properties)
{
Console.WriteLine(property.Key + " - " + property.Value.Type);
}
// name - String
// hobbies - Array

这只是一种获取数据的简单方法......有很多方法可以获取数据 有关详情Click here for documentaion of JSON.NET to work on JSON Data

我希望我的回答很有帮助