关于此类问题,有很多问题,例如:
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对象?
答案 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
我希望我的回答很有帮助